簡體   English   中英

ReentrantReadWriteLock vs synchronized

[英]ReentrantReadWriteLock vs synchronized

我們應該何時使用ReentrantReadWriteLock與Java中多線程環境中的synchronized關鍵字進行比較?

使用ReentrantReadWriteLock而不是Java中的同步有什么好處?

任何人都可以給出一個例子(在Java中)嗎?

謝謝!

同步允許一次在一個線程中。

讀/寫鎖允許同時在多個讀取器中,但只有在沒有編寫器的情況下才允許。因此,在某些使用場景下,我們可以獲得更好的並發性,因為讀者群可以一起進行。

Java API 文檔給出了集合類的示例,這些集合類應該具有比編寫器更多的讀者。

Brian鎖定文章詳細解釋了每種方法的優缺點。

Lock框架是同步的兼容替代品,它提供了許多未由synchronized提供的功能,以及在爭用下提供更好性能的實現。 然而,這些明顯的好處的存在並不足以讓ReentrantLock更加同步。 相反,根據您是否需要ReentrantLock的強大功能做出決定。 在絕大多數情況下,您不會 - 同步工作正常,適用於所有JVM,可以被更廣泛的開發人員理解,並且不易出錯。 在您真正需要時保存鎖定。 在那些情況下,你會很高興你擁有它。

應該注意的是, StampedLock已經推出了Java 8,並且它比ReentrantReadWriteLock快得多(特別是當你使用越來越多的線程時)你不以可重入的方式使用鎖(使用StampedLock可能會導致死鎖) ,所以不要這樣做)。

它還允許在沒有寫鎖定的情況下可用的樂觀讀取非鎖定。 與普通讀鎖不同,它們不會阻止建立寫鎖。 您可以使用validate方法檢查是否已在樂觀讀取非鎖定上建立了寫鎖定。

它的接口有點不同,因為你必須存儲一個稱為戳記的long值,以便以后正確地解鎖讀或寫鎖,或者在你完成后再適當地validate樂觀讀取非鎖定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM