AtomicReference与AtomicReferenceFiledUpdater比较分析
AtomicReference分析
1 | @Slf4j |
执行结果为:
根据结果,可以看出其运行顺序跟我们预期是完全吻合的。
看一下AtomicReference的compareAndSet(a, b)方法源码:
1 | public final void lazySet(V newValue) { |
又是调用的unsafe.compareAndSwapObject(xxx),再看一下:
1 | public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5); |
看来这个类真的是个典型的AtomicXXX类!
AtomicReferenceFiledUpdater分析
写出一个小例子:
1 | @Slf4j |
其输出结果正如预期为:
AtomicReferenceFieldUpdater的核心为:原子性地去更新某一个类的实例中指定的某一个字段,而该字段必须使用volatile标识且不能被static标识进行声明。
手记小总结
AtomicReference与AtomicReferenceFieldUpdater都是用于原子性地修改更新,都是线程安全的。但是后者是通过指定类的实例中的某一个字段,且该字段必须使用volatile标识且非static标识进行声明。
这两个类实际中用到的都不是很多……
v1.5.2