最近看完了美团2018年出的后台技术分享,其中有一章叫“java不得不说的锁事”,看完了觉得受益匪浅,所以在这里记录一下(纯记录,内容全部来自于美团技术团队,不用于盈利,侵删)。另外,现在在看阿里出的《码出高效》,里面有一节叫“并发与多线程”,对锁的理解和使用角度与美团又有很大的不同,等看完了再来更新~~~
线程要不要锁住同步资源?
锁住:悲观锁
不锁住:乐观锁
锁住同步资源失败,线程要不要阻塞?
阻塞:
不阻塞:自旋锁
与适应性自旋锁
多个线程竞争同步资源的流程细节有没有区别?
不锁住资源,多个线程中只有一个能修改资源成功,其他线程会重试:无锁
同一个线程执行同步资源时自动获取资源:偏向锁
多个线程竞争同个资源时,没有获取资源的线程自旋等待锁释放:轻量级锁
多个线程竞争同步资源时,没有获取资源的线程阻塞等待唤醒:重量级锁
多个线程竞争锁时要不要排队?
排队:公平锁
先尝试插队,插队失败再排队:非公平锁
一个线程中的多个流程能不能同时获取同一把锁?
能:可重入锁
不能:非可重入锁
多个线程能不能共享一把锁?
能:共享锁
不能:排他锁
网友评论