2012-12-20 61 views
0

如標題所示,好奇噹噹前線程崩潰時,readwritelock會發生什麼情況。如果當前線程崩潰,那麼readwritelock會發生什麼

readlock.lock(); 
try { 
    ... 
} finally { 
    readlock.unlock(); 
} 

我們完全可以在finally塊中解鎖,以防止任何中斷。但是如果readLock.lock()語句崩潰怎麼辦?鎖是否自動釋放?

感謝,

+0

Java中沒有任何概念或能力讓單個線程「崩潰」。 – nos

+0

實際上,它沒有。但是,如果一個實現可能在我們調用readLock.lock()時拋出一個RuntimeException,那麼會發生什麼 – Alfred

回答

2
  • 如果readlock.lock引發異常。
  • 鎖定操作失敗。
  • 正在獲取鎖定。
  • unlock是必需的。

如果在readlock.lock期間拋出運行時異常,但正在獲取鎖。 lock作者正在實施它錯誤。你可以爲作者提交一個錯誤報告:)

0

這取決於具體的實現「readlock」變量和「如何做你的線程崩潰」。據我所見,'readlock'變量可以是任何類型,並且線程可以有多種方式崩潰。

僅供參考,每個java對象都有一個「監視器」。如果你需要的是由多個線程訪問共享變量的同步,我建議你花一些時間與本章的Java教程:http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html

1

如果您參考java.util.concurrent.locks.ReentrantReadWriteLock類,那麼線程的崩潰只是readlock.lock()後(readlock.unlock()有未被調用)將不會釋放讀鎖。

雖然寫鎖不同。寫鎖定義了所有者,只能由獲取它的線程釋放。相反,讀鎖沒有所有權概念,並且不要求釋放讀鎖的線程與獲取它的線程相同。

我建議將readlock.lock()放入try-finally語句中。

相關問題