我在tomcat上部署了一个Web应用程序。在此应用程序中, ExecutorService 执行某些并发执行的任务。我的应用程序中也有一些方法使用Thread native,如下所示执行并发执行。
new Thread(new Runnable() {
public void run() {
//TODO: Perform some CRUD function
}
}).start();
当针对这些方法调用表单POST时,将启动线程并根据需要执行函数执行。我的问题是,这是一个很好的设计方法,还是我必须在每次会话后关闭线程,或者当tomcat关闭以进行维护时关闭线程。有人可以指出我正确的方向。
答案 0 :(得分:1)
我是否必须在每次会话后关闭线程,或者在tomcat关闭以进行维护时关闭线程
我不太明白这一部分,但是创建随机数量的新线程是一个坏主意,首先它是昂贵的,其次它不可能创建任意大量的线程,迟早你会遇到的记忆异常。更好地使用线程池。
答案 1 :(得分:0)
创建和启动新线程是相当昂贵的操作。如果您担心效果,请使用Executors.newCachedThreadPool
方法
此外,如果您使用某些Executors.newFixedThreadPool
,则无需担心线程限制耗尽。请注意,如果用户数超过池中的线程数,则使用此类型的执行程序可能会导致用户延迟。但是,如果任务执行的操作是短时间的,用户几乎不会注意到延迟。
答案 2 :(得分:0)
这种方法存在两个问题:
您可以通过使用java.util.concurrent
包提供的功能来解决这些问题。有关详细信息,请参阅this tutorial。