关机线程
我在tomcat上部署了一个web应用程序。在这个应用程序中有ExecutorService执行一些任务的并发执行。我的应用程序中也有一些使用Thread native的方法,如下所示执行并发执行。关机线程
new Thread(new Runnable() {
public void run() {
//TODO: Perform some CRUD function
}
}).start();
当针对这些方法调用表单POST时,会启动线程并根据需要执行函数执行。我的问题是,这是一个很好的设计方法,还是必须在每次会话后关闭线程,或者在tomcat关闭以进行维护时关闭线程。请有人指点我正确的方向。
我必须每个会话后关闭线程,还是我关闭线程当Tomcat关闭的发言权维护
我不太明白这个部分,而是创造新的随机数线程是一个坏主意,首先它很昂贵,其次它不可能创建任意数量的线程,迟早你会遇到内存不足的例外。更好地使用线程池。
创建和启动新线程是相当昂贵的操作。如果您关注性能,请采用Executors.newCachedThreadPool
方法。
此外,如果您不需要担心线程限制耗尽的情况下使用某些Executors.newFixedThreadPool
。请注意,如果用户数超过池中的线程数,则使用此类执行程序可能会导致用户延迟。但是,如果由任务执行的操作是短时间的,则用户几乎不会注意到延迟。
默认情况下,Executors.newCachedThreadPool会为我执行启动和关闭功能吗? – Bitmap 2010-12-15 09:52:17
@Bitmap Pool将在需要执行提交的任务('Runnable'或'Callable')时启动线程。池不会关闭线程,因为它们会被重用于您提交的新任务 - 这就是为什么它被称为池的原因;) – 2010-12-15 09:56:30
有两个问题的方法:
- 创建一个新的线程并不便宜。在客户端连接之间共享线程池是更好的方法
- 可能会对JVM可创建的并发线程数量施加限制。一旦达到此限制,新的客户端连接将被拒绝。
您可以通过使用java.util.concurrent
包提供的设施来解决这些问题。详情请参阅this tutorial。
好吧!所以说我正在使用Executors.newFixedThreadPool(7),你认为什么时候关闭执行程序是理想的?如何在应用程序类中使单个ExecutorService对象可用! – Bitmap 2010-12-15 09:59:22
出于好奇,你如何做交易处理? – mhaller 2010-12-15 10:43:17
使用Hibernate3事务管理器 - 任何建议? – Bitmap 2010-12-16 08:59:27