被廢棄的 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit


最近學習多線程的知識,看到API里說這些方法被廢棄了,就查了一下原因

Thread.stop

這個方法會解除被加鎖的對象的鎖,因而可能造成這些對象處於不一致的狀態,而且這個方法造成的ThreadDeath異常不像其他的檢查期異常一樣被捕獲。

可以使用interrupt方法代替。事實上,如果一個方法不能被interrupt,那stop方法也不會起作用。

 

Thread.suspend, Thread.resume

這倆方法有造成死鎖的危險。使用suspend時,並不會釋放鎖;而如果我想先獲取該鎖,再進行resume,就會造成死鎖。

可以使用object的wait和notify方法代替。wait方法會釋放持有的鎖。

 

Runtime.runFinalizersOnExit 

這個方法本身就是不安全的。它可能導致終結器(finallizers)被在活動對象上被調用,而其他線程正在並發操作這些對象。而且,這個調用不是“線程安全”的,因為它設置了一個VM全局標志。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM