AtomicInteger使用介绍 AtomicIntegerLimit工具类 Java其它原子对象介绍
- 2016-11-12 19:54:00
- admin
- 原创 1425
一、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修改引用和版本;