[英]ReentrantReadWriteLock vs synchronized
我們應該何時使用ReentrantReadWriteLock與Java中多線程環境中的synchronized關鍵字進行比較?
使用ReentrantReadWriteLock而不是Java中的同步有什么好處?
任何人都可以給出一個例子(在Java中)嗎?
謝謝!
同步允許一次在一個線程中。
讀/寫鎖允許同時在多個讀取器中,但只有在沒有編寫器的情況下才允許。因此,在某些使用場景下,我們可以獲得更好的並發性,因為讀者群可以一起進行。
Java API 文檔給出了集合類的示例,這些集合類應該具有比編寫器更多的讀者。
應該注意的是, StampedLock
已經推出了Java 8,並且它比ReentrantReadWriteLock
快得多(特別是當你使用越來越多的線程時)你不以可重入的方式使用鎖(使用StampedLock
可能會導致死鎖) ,所以不要這樣做)。
它還允許在沒有寫鎖定的情況下可用的樂觀讀取非鎖定。 與普通讀鎖不同,它們不會阻止建立寫鎖。 您可以使用validate
方法檢查是否已在樂觀讀取非鎖定上建立了寫鎖定。
它的接口有點不同,因為你必須存儲一個稱為戳記的long
值,以便以后正確地解鎖讀或寫鎖,或者在你完成后再適當地validate
樂觀讀取非鎖定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.