AtomicInteger使用介绍 AtomicIntegerLimit工具类 Java其它原子对象介绍

2016-11-12 19:54:00
admin
原创 1425
摘要:AtomicInteger使用介绍 AtomicIntegerLimit工具类 Java其它原子对象介绍

一、AtomicInteger使用简介

1、java.util.concurrent.atomic.AtomicInteger extends Number;

2、构造函数AtomicInteger(int initialValue)和AtomicInteger(),后者初始值是0;

3、使用volatile+CAS机制实现;

4、原子操作:get、set、getAndSet、compareAndSet;

5、weakCompareAndSet可能会意外失败,不建议使用

6、lazySet减少不必要的volatile操作,变量的修改对其它线程不立即可见,性能优化考虑使用

7、示例代码:AtomicIntegerTest.java


变量原子性:

1、int变量读写操作是原子操作;

2、reference变量读写操作是原子操作;

3、long和double是volatile,读写操作是原子操作;

4、参考文档:https://docs.oracle.com/javase/specs/jls/se10/html/jls-17.html#jls-17.7

5、参考文档:https://stackoverflow.com/questions/50095501/atomicinteger-set-method-is-atomic


二、AtomicIntegerLimit工具类

1、带数值下限和上限;

2、调用AtomicIntegerLimit对性能基本无影响,10线性并发压测,6000TPS基本不变;

3、增加Access Log对性能基本无影响,10线性并发压测,6000TPS基本不变;

4、示例代码:AtomicIntegerLimit.java


三、Java其它原子对象介绍

AtomicBoolean原子操作:get、set、getAndSet、compareAndSet;

AtomicReference原子操作:get、set、getAndSet、compareAndSet;

AtomicIntegerArray原子操作:针对数组的元素;

AtomicIntegerFieldUpdater原子操作:针对对象的整型成员,成员必须用volatile修饰;

AtomicMarkableReference绑定引用和布尔,attemptMark修改标记,compareAndSet修改引用和标记;

AtomicStampedReference绑定引用和整数,attemptStamp修改版本,compareAndSet修改引用和版本;

发表评论
评论通过审核之后才会显示。