Java 单个servlet容器中有多个单例(Tomcat)

Java 单个servlet容器中有多个单例(Tomcat),java,multithreading,jakarta-ee,tomcat,servlets,Java,Multithreading,Jakarta Ee,Tomcat,Servlets,我有自己的构建java web应用程序的框架,在该框架内,我创建了自己的Threadpool executor服务,即singleton。因此,使用我的框架的每个web应用程序在启动时都将创建一个线程池执行器,供内部使用 我的问题是: 假设我在同一个Tomcat中部署了两个web应用程序,这两个线程池会相互干扰吗 第一个web应用程序的线程是否有可能从第二个web应用程序访问线程池,反之亦然 我是否需要为驻留在单个servlet容器中的所有web应用创建单个线程池服务,而不是为每个web应用创建

我有自己的构建java web应用程序的框架,在该框架内,我创建了自己的Threadpool executor服务,即singleton。因此,使用我的框架的每个web应用程序在启动时都将创建一个线程池执行器,供内部使用

我的问题是:

  • 假设我在同一个Tomcat中部署了两个web应用程序,这两个线程池会相互干扰吗
  • 第一个web应用程序的线程是否有可能从第二个web应用程序访问线程池,反之亦然
  • 我是否需要为驻留在单个servlet容器中的所有web应用创建单个线程池服务,而不是为每个web应用创建一个线程池服务
  • 多谢各位

  • 不会。webapps应该由Tomcat中的ClassLoader隔离,因此每个应用都应该有自己的singleton实例
  • 只要#1的答案实际上是否定的,那么这个问题的答案也是否定的
  • 可能不会

  • 另一方面,我的理解是,作为一般规则,Java EE web应用程序不应该产生新的线程。

    将单线程放在多线程web应用程序中是个坏主意。我喜欢服务理念,但与其说是一个线程池,不如说是一个或多个资源,应用程序的所有实例都可以“调用”来执行您在这些线程中执行的任何操作。如果他们衍生出异步线程,它会将工作与web应用程序隔离开来,这需要仔细考虑。有了JavaEE 7,我们最终可以使用容器来衍生新线程。Philippe,其伟大的JEE 7可以做到这一点,但目前我正在使用Tomcat 7,它只是一个Servlet容器,我计划使用Glassfish。。集中式线程池执行器将是一个很好的方法。还有其他答案吗?从别人那里作为第二意见?