线程setDameon(true)挂Tomcat Shutdown

时间:2014-05-16 14:42:11

标签: java multithreading tomcat

最近我修复了Tomcat Shutdown中的一个错误。这是因为当Tomcat尝试关闭时,有些线程挂在那里。

我所做的与此类似:

https://github.com/craigmingtaozhang/RxJava/blob/master/rxjava-core/src/main/java/rx/schedulers/EventLoopsScheduler.java

public Thread newThread(Runnable r) {
    Thread t = new Thread(r, "RxComputationThreadPool-" + counter.incrementAndGet());
    t.setDaemon(true);
    return t;
}

我在其他情况下发现了类似的问题:

https://issues.apache.org/jira/browse/KAFKA-1305?jql=project%20%3D%20KAFKA%20AND%20resolution%20%3D%20Unresolved%20AND%20priority%20%3D%20Blocker%20ORDER%20BY%20key%20DESC

任何人都可以帮忙解释使用setDaemon的优缺点吗?

1 个答案:

答案 0 :(得分:3)

setDaemon(true)将特定线程标记为守护进程。守护程序线程是一种特殊的线程--JVM不必等到它们完成才能关闭(通过完成main()方法)。

您可能希望守护程序线程执行非关键清理工作,例如收集一些统计信息。

很难说它的优点和缺点是什么,但我尽力解释它的想法和可能的用法。