多線程操做會帶來不一致性,爲了實現一直性。咱們能夠用關鍵字: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關鍵字聲明變量。