簡體   English   中英

為什么volatile變量比普通同步更有效

[英]Why is volatile variable much more efficient than plain synchronization

我被告知使用volatile變量比使用synchronized塊(讀或寫)時使用synchronized塊要高效得多。

直到Java 1.4我才能看到原因(因為那時線程不必刷新並刷新所有可訪問的內存)。

但是從Java 1.5開始,我在使用volatile變量和synchronized塊之間看到的唯一區別就是鎖獲取機制。

獲得鎖真的那么貴嗎? 如果是這樣,那為什么呢?

“費用”是因為它每次都從內存中讀取,而不是可能使用內存緩存。 不是很多,至少在x86機器上

volatile變量和同步是用於同步的不同工具。 它也不是比較這些性能的理想選擇。

易失性 - http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.5 - 在某種程度上,它可以解決變量的可見性和重新排序等問題說明。

同步 - 它完全是一個不同的巨人。 它保證了原子性以及處理重新排序和可見性。 為了實現原子性,它必須做大量的簿記。

因此,同步讀取或寫入易失性變量是昂貴的。 公平地說,你應該比較不同的同步機制和不同類型的鎖,即ReaderWriterLock,StampedLock,還研究了CompareAndSwap它的一個很好的閱讀。

暫無
暫無

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

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