原子操作CAS

2020-08-18  本文已影响0人  策马踏清风

Atom不可分割的意思,CAS是一种替换操作,不是锁。

一、原子操作

1.1sync的缺点

  1. 基于阻塞机制
  2. 被阻塞的线程优先级很高
  3. 拿到锁的线程不释放
    4.大量竞争消耗cpu带来死锁等问题

1.2 CAS原理

  1. 基于指令级别保证是原子操作
  2. 基本思路:如果内存地址的值和期望值相等,就把新的值赋给此内存地址,否则不进行操作
  3. 在循环中不断进行CAS操作,直到成功(自旋)。

1.3 ABA问题

1.4 性能问题

1.5 常用工具

类型 jdk类 备注
基本类型 AtomicBoolean AtomicInteger AtomicLong 常用getAndIncrement()先获取后累加,incrementAndGet()先累加再获取之类的方法。
数组 AtomicIntegerArray AtomicLongArray AtomicReferenceArray 可以理解为数组的引用类型
引用类型 AtomicReference AtomicMarkableReference AtomicStampedReference AtomicReference包装一个类,然后调用compareAndSet进行原子操作替换成另一个类。可以进行整个类的CAS原子操作。另外两个主要关系ABA问题,mark关心是否被动过,stamped关心动过几次
原子更新字段类 AtomicReferenceFieldUpdater AtomicIntegerFieldUpdater AtomicLongFieldUpdater 比较麻烦,可以用上一个替代
上一篇下一篇

猜你喜欢

热点阅读