當我的應用程序準備退出時,通過關閉窗口或調用System.exit()方法。我是否必須手動停止我可能創建的線程,否則Java會爲我處理這些線程?我是否必須在Java中手動停止線程?
9
A
回答
11
如果使用System.exit()。無論它們是否守護,所有線程都會停止。
否則,JVM將自動停止由Thread.setDaemon(true)設置的後臺進程線程的所有線程。換句話說,只有剩餘的線程都是守護線程或根本沒有線程時,jvm纔會退出。
考慮下面的例子,即使主方法返回後,它仍會繼續運行。 但是如果你將它設置爲守護進程,它將在主方法(主線程)終止時終止。
public class Test {
public static void main(String[] arg) throws Throwable {
Thread t = new Thread() {
public void run() {
while(true) {
try {
Thread.sleep(300);
System.out.println("Woken up after 300ms");
}catch(Exception e) {}
}
}
};
// t.setDaemon(true); // will make this thread daemon
t.start();
System.exit(0); // this will stop all threads whether are not they are daemon
System.out.println("main method returning...");
}
}
3
如果您希望在退出時正常停止線程,Shutdown Hooks可能是一種選擇。
的樣子:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//Stop threads }
});
參見:hook-design
相關問題
- 1. 我是否必須停止System.Timers.Timer?
- 2. 是否必須手動完成EF upsert?
- 3. 在Java中停止線程?
- 4. 線程在其父進程停止時是否會停止
- 5. 我是否必須在應用程序退出時手動關閉Executor?
- 6. Java,停止(中斷)線程
- 7. 我是否必須pthread_join創建每個線程?
- 8. 如何在Java中停止線程
- 9. 如何在Java中停止線程?
- 10. 是否有必要在Activity的onStop()中停止動畫?
- 11. 斷點是否停止所有線程?
- 12. 這是我應該停止Java中的線程的方式嗎?
- 13. 是否可以啓動(並停止)DLL中的線程?
- 14. Java線程意外停止
- 15. Java線程不會停止
- 16. 如何停止Java線程?
- 17. 停止線程onclicklistener java
- 18. 我是否必須在每條線上演員?
- 19. 是否必須在我的應用程序中進行配置?
- 20. 是否必須在主線程上執行GCD主隊列?
- 21. UIImageView setHighlightedImage:它是否必須在主線程上?
- 22. 是否必須在主線程上調用UIView的-drawRect?
- 23. epoll:我必須使用多線程
- 24. 我必須使用多少個線程
- 25. RichTextBox - InvalidOperationException:調用線程必須是STA
- 26. java中的多線程停止
- 27. Java中,如何停止線程
- 28. 停止或中斷Java線程
- 29. 如何停止Java中的線程?
- 30. JFrame setVisibility(false)是否停止我創建的所有線程?