簡體   English   中英

給程序時間關閉線程但使用 System.exit 備份計划?

[英]Give program time to shutdown threads but with System.exit backup plan?

有時,Java 應用程序的系統進程不會完全關閉。 這主要是因為一個或多個線程沒有死亡。

可以調用:

System.exit(0);

但這會殺死所有線程。

我希望我的所有線程都能正確關閉,所以我不打算使用 System.exit。 但有時由於某些情況,一個或多個線程不會正確死亡。 這會導致應用程序無法完全關閉並在后台逗留,有時甚至會鎖定資源。

我的第一個想法是編寫一個 ExitWatcher,它在程序停止時啟動並在 10 秒后調用 system.exit 如果程序仍然存在。 我很快發現 ExitWatcher 現在可以防止程序關閉 ;-)

如果關閉時間過長,你如何給java程序時間正確關閉(即正確關閉所有線程)但同時有一個調用System.exit的備份計划?

當您不希望線程阻止程序退出時,您可以使用守護線程(因此在ExitWatcher線程上使用setDaemon(true)可以解決您的直接問題)。 但是,我懷疑您是否真的需要或想要一個 ExitWatcher,因為通過適當的設計,通常可以相對容易地防止這種情況。

正確的關閉程序包括中斷活動線程(並設計它們以便它們在中斷時表現良好)、在必要時使用守護線程、正確關閉連接等。使用像 ExitWatcher 這樣的機制更像是一種黑客方法,因為它表明您程序在關機時並不總是表現良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM