如標題所示,好奇噹噹前線程崩潰時,readwritelock會發生什麼情況。如果當前線程崩潰,那麼readwritelock會發生什麼
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
我們完全可以在finally塊中解鎖,以防止任何中斷。但是如果readLock.lock()語句崩潰怎麼辦?鎖是否自動釋放?
感謝,
如標題所示,好奇噹噹前線程崩潰時,readwritelock會發生什麼情況。如果當前線程崩潰,那麼readwritelock會發生什麼
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
我們完全可以在finally塊中解鎖,以防止任何中斷。但是如果readLock.lock()語句崩潰怎麼辦?鎖是否自動釋放?
感謝,
readlock.lock
引發異常。unlock
是必需的。如果在readlock.lock
期間拋出運行時異常,但正在獲取鎖。 lock
作者正在實施它錯誤。你可以爲作者提交一個錯誤報告:)
這取決於具體的實現「readlock」變量和「如何做你的線程崩潰」。據我所見,'readlock'變量可以是任何類型,並且線程可以有多種方式崩潰。
僅供參考,每個java對象都有一個「監視器」。如果你需要的是由多個線程訪問共享變量的同步,我建議你花一些時間與本章的Java教程:http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
如果您參考java.util.concurrent.locks.ReentrantReadWriteLock
類,那麼線程的崩潰只是readlock.lock()
後(readlock.unlock()
有未被調用)將不會釋放讀鎖。
雖然寫鎖不同。寫鎖定義了所有者,只能由獲取它的線程釋放。相反,讀鎖沒有所有權概念,並且不要求釋放讀鎖的線程與獲取它的線程相同。
我建議將readlock.lock()
放入try-finally語句中。
Java中沒有任何概念或能力讓單個線程「崩潰」。 – nos
實際上,它沒有。但是,如果一個實現可能在我們調用readLock.lock()時拋出一個RuntimeException,那麼會發生什麼 – Alfred