那些琐事

一.概况
锁按照大类分为线程锁和进程锁,此文现只讨论线程锁
二.分类
1.线程是否要锁住同步资源:
锁住:悲观锁
不锁住: 乐观锁 CAS
2.锁住同步资源失败,线程是否要阻塞:
阻塞
不阻塞:
自旋锁
适应性自旋锁
3.多个线程竞争同步资源的流程细节有没有区别:
不锁住资源,多个线程中只有一个能修改资源成功,其他线程会重试: 无锁
同一个线程执行同步资源时自动获取资源: 偏向锁
多个线程竞争同步资源时,没有获取资源的线程自旋等待锁释放: 轻量级锁
多个线程竞争同步资源时,没有获取资源的线程阻塞等待唤醒: 重量级锁
4.多个线程竞争锁时是否要排队:
排队:公平锁
先尝试插队,插队失败再排队: 非公平锁 AQS
5.一个线程的多个流程能不能获取同一把锁:
能:可重入锁
不能:非可 重入锁
6.多个线程能不能共享一把锁:
能:共享锁
不能:排它锁(独占锁)
三,一些理解
所有的锁其实都是线程和资源的结合,也就是说锁是针对线程和数据库或者是代码来的,上述所有的锁,都是最基本的元素之间的组合
synchronized、LOCK下的ReentrantLock、以及数据库锁
实现的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章