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关键字声明变量。

相关文章
相关标签/搜索