我正在使用 Glassfish 3 Web 配置文件,无法让 http 工作人员在 servlet 上同时执行请求。
这就是我观察到问题的方式。我制作了一个非常简单的 servlet,它将当前线程名称写入标准输出并休眠 10 秒:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(10000); // 10 sec
}
catch (InterruptedException ex) {
}
}
当我同时运行多个请求时,我在日志中清楚地看到请求是按顺序执行的(每 10 秒跟踪一次)。
INFO: http-thread-pool-8080-(2)
(10 seconds later...)
INFO: http-thread-pool-8080-(1)
(10 seconds later...)
INFO: http-thread-pool-8080-(2)
等等
我所有的 GF 设置都保持不变——这是开箱即用的配置(默认线程池最少 2 个线程,如果我没记错的话,最多 5 个线程)。
我真的不明白为什么 sleep() 会阻塞所有其他工作线程。任何见解将不胜感激!