multithreading - servlet多线程

标签 multithreading servlets

我了解Servlet请求默认是多线程的。我使用NetBeans创建了一个简单的servlet,它在Tomcat和JBoss上似乎都是单线程的。

我使用以下代码对其进行了测试:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

   System.out.println("access processRequest: " + this + " threadID: " + Thread.currentThread().getId());

    try {
        Thread.sleep(5000);
    } catch (InterruptedException ex) {
        Logger.getLogger(OctaveServlet.class.getName()).log(Level.SEVERE, null, ex);
    }

    System.out.println("exit processRequest: " + this + " threadID: " + Thread.currentThread().getId());

}

(从doGet调用processRequest)

我几乎同时从浏览器的2个选项卡访问了此选项,如果多线程可以正常工作,我希望它可以打印具有2个不同线程ID的“访问”,然后显示两个线程的“退出”。
相反,我得到以下输出:

14:53:41,839 INFO [stdout](http--127.0.0.1-8080-1)访问过程请求:OctaveServlet @ 31ccfe线程ID:34
14:53:46,840 INFO [stdout](http--127.0.0.1-8080-1)退出进程请求:OctaveServlet @ 31ccfe线程ID:34
14:53:46,867 INFO [stdout](http--127.0.0.1-8080-1)访问过程请求:OctaveServlet @ 31ccfe线程ID:34
14:53:51,867 INFO [stdout](http--127.0.0.1-8080-1)退出进程请求:OctaveServlet @ 31ccfe线程ID:34

如您所见,它只是一个线程。
不用说,我没有实现SingleThreadModel。

以下是我的系统的详细信息:
NetBeans 7.0.1,JVM:Sun Java 1.6.0_26,Tomcat 7.0.14,JBoss AS 7,Ubuntu 11.04

非常感谢您的帮助,

奥德。

最佳答案

每个HTTP连接使用一个线程(这不完全是服务器使用NIO时的情况,但您明白了)。您的浏览器显然在两个选项卡中都使用相同的HTTP连接。生成两个不同的浏览器实例(例如Firefox和Chrome),您会发现它可以按预期的方式工作。

关于multithreading - servlet多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681291/

相关文章:

css - 无法在 Spring MVC 4 (eclipse) 中加载本地 css

java - servlet 的 doGet 内的数据库查询

java - java中的synchronized方法如何保证对对象的不干扰

java - 出现错误 "getOutputStream() has already been called for this response"

Java 套接字 - 如何向多个线程发送消息?

c# - Windows 服务上的多个计时器未正确触发

java - Servlet 适合复合操作吗?

java - 认证弹窗是怎么来的

java - 在 Java 中等待一个事件——有多难?

Java EE future 的空指针