[转载]为什么不推荐使用stop和suspend这两个方法?
????? stop和suspend都有一些共同的點:都試圖專橫的控制一個給定了的線程的行為.
?從JDK1.2開始,這兩個方法都被棄用了.stop天生就不安全,而經(jīng)驗告訴我們呢suspend方法會經(jīng)常導致死鎖。
stop這個方法將終止所有未結(jié)束的方法,包括run方法。當一個線程停止時候,他會立即釋放所有他鎖住對象上的鎖。這會導致對象處于不一致的狀態(tài)。假如一個方法在將錢從一個賬戶轉(zhuǎn)移到另一個賬戶的過程中,在取款之后存款之前就停止了。那么現(xiàn)在銀行對象就被破壞了。因為鎖已經(jīng)被釋放了。當線程想終止另一個線程的時候,它無法知道何時調(diào)用stop是安全的,何時會導致對象被破壞。所以這個方法被棄用了。你應(yīng)該中斷一個線程而不是停止他。
suspend不會破壞對象。但是,如果你用一個suspend掛起一個有鎖的線程,那么在鎖恢復之前將不會被釋放。如果調(diào)用suspend的方法線程試圖取得相同的鎖,程序就會死鎖。
那么在程序中該怎么樣使用線程呢?建議如下:
(1)最好不要使用Lock/Condition也不使用synchronized關(guān)鍵字。在很多情況下你可以使用java.util.concurrent包中的一種機制,它會為你處理所有的加鎖。例如阻塞同步隊列。
(2)如果synchronized關(guān)鍵字在程序中可以工作,那么就盡量使用它,這樣可以減少代碼數(shù)量和出錯的幾率。
(3)只有在非常需要Lock/Condition結(jié)構(gòu)特性的時候才使用他們。
?青春就應(yīng)該這樣綻放??游戲測試:三國時期誰是你最好的兄弟!!??你不得不信的星座秘密
總結(jié)
以上是生活随笔為你收集整理的[转载]为什么不推荐使用stop和suspend这两个方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于unix下使用tar的一些常用技巧
- 下一篇: 如何在DC机上禁用成员机的本地账号