一.实现线程安全的原理
- 锁的线程安全实现原理:AQS+CAS
- AQS:AbstractQueuedSynchronizer,简称AQS,是java.util.concurrent的核心,CountDownLatch、FutureTask、Semaphore、ReentrantLock等都有一个内部类是这个抽象类的子类,实现锁的核心。AQS是基于FIFO队列的实现。
- Compare and swap(CAS):当前的处理器基本都支持CAS,每一个CAS操作过程都包含三个运算符:一个内存地址V,一个期望的值A和一个新值B,操作的时候如果这个地址上存放的值等于这个期望的值A,则将地址上的值赋为新值B,否则不做任何操作。
java实现类Unsafe:Java无法直接访问底层操作系统,而是通过本地(native)方法来访问,它提供了硬件级别的原子操作。
- AtomicInteger线程安全实现原理:CAS+volient关键字
二.AQS实现类层次关系
锁相关实现类内部抽象类Sync继承AQS,公平锁的实现FairSync类,非公平锁的实现是NonfairSync类。