1 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
當(dāng) JVM 關(guān)閉時(shí)調(diào)用關(guān)閉掛鉤;請(qǐng)參閱類(lèi) JavaDoc 在運(yùn)行時(shí).add.下載鉤子
.但是,從調(diào)試器終止運(yùn)行并不是關(guān)閉。
常規(guī)退出
當(dāng)最后一個(gè)非守護(hù)程序線程退出,或者通過(guò)代碼調(diào)用System.exit(),
或者在命令行上按CTRL-C(或者程序被發(fā)送一個(gè)終止信號(hào),例如使用任務(wù)管理器),然后執(zhí)行關(guān)閉鉤子,一旦它們完成,JVM就會(huì)關(guān)閉。
退出調(diào)試器
如果在調(diào)試期間終止程序,然后按“停止”,IDE 將立即中止你的應(yīng)用。沒(méi)有機(jī)會(huì)運(yùn)行關(guān)機(jī)掛鉤。這通常是正確的做法;調(diào)試時(shí),您通常只想殺死正在運(yùn)行的任何內(nèi)容。
調(diào)試時(shí)正常退出
如果你想要一種在調(diào)試時(shí)運(yùn)行關(guān)機(jī)鉤子的方法,有很多方法;一種是通過(guò)代碼調(diào)用系統(tǒng)退出()
;這將觸發(fā)鉤子。在這個(gè)相關(guān)的問(wèn)題中,他們等待按鍵事件,然后再調(diào)用 system.exit。
關(guān)于
當(dāng)我停止程序時(shí),我應(yīng)該如何停止所有這些線程?
同樣,您可以調(diào)用 System.exit(),
這樣即使非 deamon 線程處于執(zhí)行過(guò)程中(這并不干凈),程序也會(huì)終止;但更好的方法是給每個(gè)線程一個(gè)正常終止的通道 - 例如。如果線程正在運(yùn)行無(wú)限循環(huán),它可以定期檢查(易失性)變量,并在變量設(shè)置時(shí)返回(通過(guò)代碼)。(變量本身應(yīng)由關(guān)機(jī)掛鉤設(shè)置)shutdown
shutdown
添加回答
舉報(bào)