Suh*_*pta 6 java multithreading persistence servlets java-ee
以下程序:
public class SimpleCounter extends HttpServlet {
int counter=0;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter writer = response.getWriter();
counter++;
writer.println("accessed " + counter + " times" );
}
}
Run Code Online (Sandbox Code Playgroud)
每次访问此servlet的url时,都会打印计数器的递增值.我读到服务器创建了这个servlet的一个实例,每当有一个对这个servlet的请求时,一个新线程将这个请求映射到服务器创建的特殊实例.
服务器创建的实例(向哪个线程映射请求)何时死掉?新请求创建的线程什么时候会死?
servlet 实例是在您的 web 应用程序启动时或首次需要它时创建的(如果设置了lazy-init)。当你的 web 应用程序停止时,当它被 GC 时,它会被丢弃。在正常的生产环境中,我敢说这种情况永远不会真正发生(不包括部署新版本)。
大多数(如果不是全部)servlet 容器都使用线程池。这意味着它们重用线程来处理请求。所以这些线程永远不会消亡;当他们完成执行请求时返回到池中。
当然,当你关闭服务器时,它们确实会死掉:)
从应用程序的角度来看,您确实应该尝试使 servlet 无状态,并且您可以放心地认为每个请求都在其自己的专用线程中执行。