标签:同步器 抽象 维护 机制 com 基本 多线程 操作 原子类
什么是CAS?
CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操 作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新 为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指令之前返回该位置的值。CAS有效地说明了“我认为位 置V应该包含值A;如果包含该值,则将B放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。
如在多线程中实现自增,会出现线程安全问题,要解决这个问题,需要通过加锁的方式,调整如下:
public class Counter { private int count; public Counter(){} public synchronized int getCount(){ return count; } public synchronized void increase(){ count++; } }
public class Counter { private AtomicInteger count = new AtomicInteger(); public Counter(){} public int getCount(){ return count.get(); } public void increase(){ count.getAndIncrement(); } }
AQS(AbstractQueuedSynchronizer),AQS是JDK下提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架。这个抽象类被设计为作为一些可用原子int值来表示状态的同步器的基类。如果你有看过类似 CountDownLatch 类的源码实现,会发现其内部有一个继承了 AbstractQueuedSynchronizer 的内部类 Sync 。可见 CountDownLatch 是基于AQS框架来实现的一个同步器.类似的同步器在JUC下还有不少。(eg.Semaphore )
标签:同步器 抽象 维护 机制 com 基本 多线程 操作 原子类
原文地址:https://www.cnblogs.com/rzbwyj/p/12577268.html