為何stop()和suspend()方法不推薦使用(轉)


 

 

stop()方法作為一種粗暴的線程終止行為,在線程終止之前沒有對其做任何的清除操作,因此具有固有的不安全性。 用Thread.stop()方法來終止線程將會釋放該線程對象已經鎖定的所有監視器。如果以前受這些監視器保護的任何對象都處於不連貫狀態,那么損壞的對象對其他線程可見,這有可能導致不安全的操作。 由於上述原因,因此不應該使用stop()方法,而應該在自己的Thread類中置入一個標志,用於控制目標線程是活動還是停止。如果該標志指示它要停止運行,可使其結束run()方法。如果目標線程等待很長時間,則應使用interrupt()方法來中斷該等待。
         suspend()方法 該方法已經遭到反對,因為它具有固有的死鎖傾向。調用suspend()方法的時候,目標線程會停下來。如果目標線程掛起時在保護關鍵系統資源的監視器上保持有鎖,則在目標線程重新開始以前,其他線程都不能訪問該資源。除非被掛起的線程恢復運行。對任何其他線程來說,如果想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。由於上述原因,因此不應該使用suspend()方法,而應在自己的thread類中置入一個標志,用於控制線程是活動還是掛起。如果標志指出線程應該掛起,那么用wait()方法命令其進入等待狀態。如果標志指出線程應當恢復,那么用notify()方法重新啟動線程。


免責聲明!

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



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