【问题标题】:More than one Singleton in a single servlet container (Tomcat)单个 servlet 容器中的多个 Singleton (Tomcat)
【发布时间】:2013-08-03 01:50:20
【问题描述】:

我有自己的构建 java web 应用程序的框架,并且在该框架内,我创建了自己的单例线程池执行器服务。因此,每个使用我的框架的 Web 应用程序都会在启动时创建 1 个线程池执行程序,供内部使用。

我的问题是:

  1. 假设我在同一个 Tomcat 中部署了 2 个 Web 应用程序,这 2 个线程池会相互干扰吗?
  2. 第一个网络应用程序的线程是否有可能从第二个网络应用程序访问线程池,反之亦然?
  3. 是否需要为驻留在单个 servlet 容器中的所有 Web 应用程序创建一个 Threadpool 服务,而不是为每个 Web 应用程序创建一个?

谢谢。

【问题讨论】:

  • 将单例放入多线程 Web 应用程序是一个坏主意。我喜欢服务理念,但与其说是线程池不如说是应用程序的所有实例都可以“调用”以执行您在这些线程中执行的任何操作的资源。如果他们分离出异步线程,它会将工作与 Web 应用程序隔离开来,而不必考虑它。

标签: java multithreading jakarta-ee tomcat servlets


【解决方案1】:
  1. 没有。 Web 应用应由 Tomcat 中的 ClassLoader 隔离,因此每个应用都应有自己的单例实例。
  2. 只要 #1 的答案实际上是否定的,那么这个答案也是否定的。
  3. 可能不会。

顺便说一句,我的理解是,作为一般规则,Java EE Web 应用程序不应该启动新线程。

【讨论】:

  • 有了 JavaEE 7,我们终于可以使用容器来启动新线程了。
  • Philippe,其出色的 JEE 7 可以做到这一点,但目前我使用的是 Tomcat 7,它只是一个 Servlet 容器,我打算使用 Glassfish .. 集中式 Threadpool 执行器将是一个不错的方法去。还有其他答案吗?其他人的第二意见?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2016-09-30
  • 1970-01-01
  • 2018-12-30
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多