Synchronized
实现依赖JVM,随着jdk版本升级从1.5的重量级锁,1.6的适应自旋、锁消除、锁粗化、轻量级锁、偏向锁等效率提升,1.7+实现机制优化。synchronized等待所不能被线程中断,容易死锁。
ReentrantLock
实现依赖cpu指令,必须在finally中解锁。引入公平锁和非公平锁(效率高)。
lock.lock() 忽略中断锁,lock.lockInterruptibly()响应中断锁
lock.tryLock()轮询锁,lock.tryLock(Long timeout, TimeUnit unit)定时轮询锁
Semaphore
与reentrantLock相似,支持多个临界资源。acquire()与release()方法来获得和释放临界资源。
AtomicInteger
运算原子化,比ReentrantLock效率高几倍。