java - Tomcat内部是如何创建线程的?

标签 java multithreading tomcat thread-safety

我正在编写一个 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 is static 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/

相关文章:

java - Selenium 找到一个选择下拉列表

java - Java 中的事件是如何产生的?

c# - 表格打开后崩溃

java - Tomcat:如何动态配置 server.xml?

tomcat - 部署 mobicents 聊天服务器(sip servlet)时出错

java - HTTP 状态 404 - 请求的资源不可用 (Apache tomcat 7)

java - 具有泛型的 Java 类层次结构中不兼容的空性约束

java - 我无法弄清楚为什么我的 Collection 在某些时候为空

c++ - 导致 C++11 std::mutex 将阻塞的线程锁定为被动等待状态?

python - 线程在 Storm 集群中不工作