1
我正在編寫一個相當大的多線程應用程序,它爲線程提供了許多不同的角色(例如事件處理,指標,網絡)。目前,如果有任何不能處理的不一致,它將表現爲例外。由於沒有辦法從其中一些中恢復,因此我將它重新拋出爲ApplicationDeathException
類型的運行時異常。使用Thread.stop(Throwable)強制將一個運行時異常強制拋入線程是否存在危險?
任何需要處理關閉的類都會從這個異常的catch塊中調用它,然後重新拋出它以便它傳播堆棧)。
我正在考慮通過調用Thread#stop(Throwable)
來關閉其他所有線程。大多數都可以突然終止,如果需要關閉邏輯,可以捕獲此異常。他們只會將異常傳播到堆棧中,隨時執行關閉邏輯,最終只會終止線程。這種方法有沒有隱藏的隱患?
我明白你提到的是一種有效的方法。我目前的問題有點不同,即在我的方法會遇到的僵局或其他陷阱方面是否存在任何危險。 – hexafraction
你的方法是否會死鎖真的取決於你的線程在做什麼,你的實現,什麼資源被保存等等。我認爲你的方法看起來很合理(除了使用Thread.stop),但是這並不意味着你的方法不存在,有可能造成僵局。 –
所有資源都在關閉時釋放,不需要明確獲取任何新的東西。 – hexafraction