java - 看起来Servlet中只有一个线程处理所有请求

标签 java multithreading servlets

很明显,一个servlet可以同时处理多个请求。例如,在服务器上建立一个连接(一个套接字),为了处理这个连接,服务器创建一个新线程,该线程调用servlet的doGet并去做一些事情。当它正在做某事时,另一个请求到达。新线程将使用其他 httpRequest 和 httpResponse 实例调用 doGet。我使用 netbeans 和 glasfish 做了一个测试。在 servlet 的 doGet 中我放入:

synchronized(obj){
 try{  
 obj.wait(50000)
   }catch(InterruptedException e)
    {
    }

当第一个请求到达时,servlet 在 50 秒之前不再接受任何请求。这意味着为了捕获后续请求,前一个线程必须完成其工作并返回以获取另一个请求。为了确保这不是因为同步语句,我在同步之前在某些语句上放置了断点,但从未到达。

最佳答案

Servlet 框架通常是多线程的。

我可以想到两种可能的解释:

  • 您的客户端是单线程的;即,在收到第一个请求的响应之前,不会发送第二个请求。

  • 不知何故,您仅使用一个工作线程配置了 GlassFish。

也有可能您的测试误导了您,以确保问题不是 obj 锁。尝试更改为使用本地锁;例如

   Object obj = new Object();  // ensure nothing else can see it!!
   synchronized (obj) {
       try {  
           obj.wait(50000)
       } catch (InterruptedException e) {
   }

关于java - 看起来Servlet中只有一个线程处理所有请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518237/

相关文章:

java - JasperReports 和 Struts2 : custom chart themes

java - DocumentBuilder 线程安全吗?

c# - 比较使用 Thread.Sleep 和 Timer 延迟执行

c++ - 并发写入 unordered_map (C++) 中的不同存储桶?

java - 如何在当前 servlet 上下文之外获取 WebApplicationContext?

java - 图像未显示在图像按钮中

java - 从 Spring Cloud Config Server 获取配置时 Spring 配置文件排序不正确

Java 8 的流 : why parallel stream is slower?

java - JSP session 不使用 servlet

java - doFilter HttpServletRequest 返回空