本文参考文章《一句话撸完重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等各种锁 ---- 不看后悔系列》和《什么是CAS机制?》,以自己的理解进行总结。
操作系统中的锁主要分为两大类:乐观锁和悲观锁。
悲观锁
悲观锁,Pessimistic Lock,即这种锁的“想法”很悲观——方法执行如果不加锁就会出事,所以操作必须上锁,一个一个的来。
其中重量级锁和自旋锁属于悲观锁。
重量级锁
当进入一个同步、线程安全的方法时,需要先获得该方法的锁,而退出这个方法时,则需要释放锁。如果线程A获取不到该锁,则意味着该方法有别的线程在执行,这时线程A会马上进入阻塞状态,直到持有锁的线程释放锁,才会从阻塞状态被唤醒,再尝试去获取该方法的锁。
重量级锁的特点是:获取不到锁,马上进入阻塞状态
由于重量级锁的特点,导致了它的效率有时候会很慢。试想,当线程A发现锁被占用,立即进入阻塞状态,之后的0.0001秒,这个锁便被释放了,那么它又会从阻塞状态进入运行状态。我们都知道,线程从运行状态进入阻塞状态,需要保存线程的执行状态、上下文等数据,以及设计到用户态到内核态