成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

java volatile關(guān)鍵字在Java中有什么作用?

volatile關(guān)鍵字在Java中有什么作用?Volatile是為了防止指令重排序以確??梢娦詫τ贘VM級別,它是為了防止編譯器重排序同時,對于某些CPU,它們會通過緩存鎖或線程來解決緩存可見性但是,

volatile關(guān)鍵字在Java中有什么作用?

Volatile是為了防止指令重排序以確??梢娦?/p>

對于JVM級別,它是為了防止編譯器重排序

同時,對于某些CPU,它們會通過緩存鎖或線程來解決緩存可見性

但是,目前很多CPU已經(jīng)過優(yōu)化,因為緩存一致性MESI會帶來性能開銷,因此使用storebuffer機制來進行異步處理,而這種機制會導致指令的無序執(zhí)行。這會導致可見性問題。

然后volatile將在CPU級別增加內(nèi)存屏障,以解決由CPU無序執(zhí)行引起的可見性問題

1。Volatile是線程同步的輕量級實現(xiàn),因此Volatile的性能優(yōu)于synchronize;Volatile只能用來修改變量,synchronize可以用來修改方法和代碼塊。隨著JDK技術(shù)的發(fā)展,同步在執(zhí)行效率上會有很大的提高,所以同步在項目的過程中還是比較普遍的。對volatile的多線程訪問將不會阻塞;而同步將阻塞;

3。Volatile可以保證私有內(nèi)存和主內(nèi)存之間變量的同步,但不能保證變量的原子性;同步可以保證變量的原子性;

4。Volatile是多線程間變量的可見性;synchronize是多線程間訪問資源的同步;對于Volatile修改的變量,可以解決讀取時變量的可見性問題,但不能保證原子性。對于多線程訪問同一實例變量,需要鎖同步。