关机线程

时间:2010-12-15 09:39:12

标签: java tomcat concurrency

我在tomcat上部署了一个Web应用程序。在此应用程序中, ExecutorService 执行某些并发执行的任务。我的应用程序中也有一些方法使用Thread native,如下所示执行并发执行。

new Thread(new Runnable() { 
 public void run() {  
   //TODO: Perform some CRUD function 
 }
}).start();

当针对这些方法调用表单POST时,将启动线程并根据需要执行函数执行。我的问题是,这是一个很好的设计方法,还是我必须在每次会话后关闭线程,或者当tomcat关闭以进行维护时关闭线程。有人可以指出我正确的方向。

3 个答案:

答案 0 :(得分:1)

  

我是否必须在每次会话后关闭线程,或者在tomcat关闭以进行维护时关闭线程

我不太明白这一部分,但是创建随机数量的新线程是一个坏主意,首先它是昂贵的,其次它不可能创建任意大量的线程,迟早你会遇到的记忆异常。更好地使用线程池。

答案 1 :(得分:0)

创建和启动新线程是相当昂贵的操作。如果您担心效果,请使用Executors.newCachedThreadPool方法 此外,如果您使用某些Executors.newFixedThreadPool,则无需担心线程限制耗尽。请注意,如果用户数超过池中的线程数,则使用此类型的执行程序可能会导致用户延迟。但是,如果任务执行的操作是短时间的,用户几乎不会注意到延迟。

答案 2 :(得分:0)

这种方法存在两个问题:

  1. 创建一个新线程并不便宜。在客户端连接之间共享线程池是一种更好的方法
  2. 可能存在系统对JVM可以创建的并发线程数量的限制。达到此限制后,将拒绝新的客户端连接。
  3. 您可以通过使用java.util.concurrent包提供的功能来解决这些问题。有关详细信息,请参阅this tutorial