先通过特性对锁进行归类,然后在使用对比的方式来介绍不同的锁之间的差异:
-
线程要不要锁住同步资源?
锁住--悲观锁
不锁住--乐观锁 -
锁住同步资源如果失败,线程要不要阻塞?
阻塞
不阻塞--自旋锁,适应性自旋锁 -
多个线程竞争同步资源的流程细节上的区别?
不锁住资源,多个线程中只有一个能够修改资源成功,其它线程会去重试--无锁
同一个线程执行同步资源时自动获取资源--偏向锁
多个线程竞争同步资源的时候,没有获取资源的线程通过自旋等待锁释放--轻量级锁
多个线程竞争同步资源的时候,没有获取资源的线程阻塞等待唤醒--重量级锁 -
多个线程竞争需不需要排队?
排队--公平锁
先尝试插队,插队失败再去排队--非公平锁 -
一个线程中的多个线程能不能获取同一把锁?
能--可重入锁
不能--非可重入锁 -
多个线程能不能共享同一把锁?
能--共享锁
不能--排他锁
网友评论