Tomcat如何在内部创建线程?

我正在编写一个Tomcat应用程序,它需要在不同的请求中维护一些内部状态,所以我需要在Tomcat创建的不同线程之间共享一些东西。 我的问题是,如果我编写这样的代码,将在Tomcat创建的线程之间共享Map (对于类是static的)。

 public class sessionManager extends HttpServlet { private static HashMap Map; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // logic } } 

我想我真正没有得到的是Tomcat如何从单个创建许多线程

我的问题是,如果我编写这样的代码,会在Tomcat [?]创建的线程之间共享Map (对于类是static的)

是。 它将在(可能)多个线程之间共享。

我想我真正没有得到的是Tomcat如何从单个类创建许multithreading。

线程不与类关联。 线程是一系列指令。 它表示代码的执行。

Tomcat产生了许多用于处理请求的线程。 它将生成sessionManager类的单个实例。 所有线程都将使用此实例来处理请求。 然后他们每个人都可以访问Map字段。 您需要根据需要应用自己的外部同步以使其线程安全。

tomcat如何创建它们并不重要。 也许new Thread(name) 。 你真正要问的是不同线程可见的内容。 了解更多google的’并发’,’线程可见性’,’java内存模型’或’之前发生’。

在您的情况下,字段本身将对您的所有线程可见。 但是对该字段的更改(将新地图分配给字段或更改地图内容)可能无法在线程之间传播。 你需要使用并发机制来在线程之间进行通信(同步,易失,并发映射等等,最适合你)