C#轉Java之路之二:多線程原子變量

多線程操做會帶來不一致性,爲了實現一直性。咱們能夠用關鍵字:synchronized同步對象或者volatile輕量級、內存可見性。java

兩個關鍵字使用對比:數組

一、synchronized比較重,屬於悲觀鎖機制,形成衝突大,線程間的上下文切換多,資源浪費。多線程

好比咱們就實現計數操做。性能

二、volatile輕量級內存可見性,非阻塞式,性能更高。線程

java已經實現了不少原子操做類:在java.util.concurrent包裏對象

 AtomicBoolean:原子Boolean類型
 AtomicInteger:原子Integer類型
 AtomicLong:原子Long類型
 AtomicReference:原子引用類型內存

及相應的數組類型:資源

AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray同步

爲了便於以原子方式更新對象中的字段,還有以下的類:
    AtomicIntegerFieldUpdater
    AtomicLongFieldUpdater
    AtomicReferenceFieldUpdater
AtomicReference還有兩個相似的類,在某些狀況下更爲易用:變量

    AtomicMarkableReference
    AtomicStampedReference

實現原理就是用到volatile關鍵字聲明變量。

相關文章
相關標籤/搜索