我正在编写一个 Tomcat 应用程序,它需要跨不同的请求维护一些内部状态,因此我需要在 Tomcat 创建的不同线程之间共享一些东西。我的问题是,如果我编写这样的代码,Map
(对类来说是static
)是否会在 Tomcat 创建的线程之间共享。
public class sessionManager extends HttpServlet {
private static HashMap<Integer, String> Map;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// logic
}
}
我想我真正不明白的是 Tomcat 如何从一个类 创建多个线程。
最佳答案
My question is, if I write code like this, will
Map
(which isstatic
to the class) be shared between threads created by Tomcat[?]
是的。它将在(可能)多个线程之间共享。
I guess what I really don't get is how does Tomcat create many threads from a single class.
线程与类无关。线程是一系列指令。它代表您的代码的执行。
Tomcat 生成许多用于处理请求的线程。它将生成您的 sessionManager
类的单个实例。所有线程都将使用这个实例来处理请求。然后他们每个人都可以访问 Map
字段。您需要根据需要应用自己的外部同步以使其线程安全。
关于java - Tomcat内部是如何创建线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776332/