常用
独占锁
ReentrantLock
定义:锁在一个时间点只能被一个线程锁占有
公平锁
非公平锁
ReentrantReadWriteLock里的WriteLock
共享
ReentrantReadWriteLock里的ReadLock
能被多个线程同时拥有,能被共享的锁
CyclicBarrier
循环栅栏,初始时设定参与线程数,当线程到达栅栏后,会等待其它线程的到达,当到达栅栏的总数满足指定数后,所有等待的线程继续执行
CountDownLatch
倒数计数器,初始时设定计数器值,线程可以在计数器上等待,当计数器值归0后,所有等待的线程继续执行
Phaser
多阶段栅栏,可以在初始时设定参与线程数,也可以中途注册/注销参与者,当到达的参与者数量满足栅栏设定的数量后,会进行阶段升级(advance)
CAS原子类
在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。通过Unsafe的CAS函数和volatile 特性直接操作系统内存实现对基本类型的累加/引用类型的变更/对象属性的变更/数组元素的修改
基本类型
AtomicLong-Integer-Boolean
LongAdder
数据类型
AtomicLong-Integer-Reference-Array
引用类型
AtomicReference/AtomicStampedRerence/AtomicMarkableReference
对象属性修改
Atomic-Long-Integer-Reference-FieldUpdater