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