當我的應用程序準備退出時,通過關閉窗口或調用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. 在Java中停止線程?
- 5. Java XmX =我是否必須將它設置爲防止Linux OOM
- 6. 線程在其父進程停止時是否會停止
- 7. 我是否必須在應用程序退出時手動關閉Executor?
- 8. Java,停止(中斷)線程
- 9. wpf線程,線程必須是STA
- 10. 線程在其ThreadStart例程返回時是否自動停止?
- 11. 我是否必須pthread_join創建每個線程?
- 12. 多線程時,我是否必須鎖定數據庫連接?
- 13. 返回false必須在java腳本中停止執行
- 14. Java中的子線程是否阻止父線程終止?
- 15. 如何在Java中停止線程?
- 16. 如何在Java中停止線程
- 17. 是否有必要在Activity的onStop()中停止動畫?
- 18. 斷點是否停止所有線程?
- 19. Android - 在單獨的線程中手動停止服務
- 20. 這是我應該停止Java中的線程的方式嗎?
- 21. 是否可以啓動(並停止)DLL中的線程?
- 22. 我的Android應用程序說不幸它必須停止
- 23. 如何停止Java線程?
- 24. 停止線程onclicklistener java
- 25. 如何停止Java線程?
- 26. Java線程意外停止
- 27. Java線程/運行停止
- 28. Java線程不會停止
- 29. java:停止Singleton線程
- 30. 我是否必須在每條線上演員?