Этот вопрос относится только к Tomcat, но ответы, которые применимы к другим серверам приложений/сервлетам, также будут интересны.Может ли один поток обрабатывать несколько запросов одновременно?
С моей точки зрения, гарантируется, что каждый запрос обрабатывается одним потоком, из пула потоков обработки запросов (проигнорируем ситуацию, когда код обработки запроса приложения выполняет асинхронную работу).
Но то, что я хотел бы знать, является, если гарантируется, что один поток будет обслуживать только один запрос в то же время?
Другими словами, возможно ли, что работа запроса R1, которая выполняется в потоке T1, предварительно упущена, и что поток T1 затем используется для обработки запроса R2, после чего обработка R1 продолжается по T1?
Возможно, этот вопрос может быть более обобщается: Может выполнение исполняемой R1 на нить T1 быть «упреждающий» в пользу исполнения другого Runnable R2 на тот же нити T1?
Я не могу избавиться от ощущения ворчания, что я просто не замечаю основополагающих принципов многопоточности на Java, поэтому, пожалуйста, просветите меня!
Нет, это невозможно. Один поток будет работать по одному запросу, пока это не будет выполнено.Нить, которая работает, никогда не может быть приостановлена, а затем задана другая задача. – f1sh