锁得膨胀:
膨胀方向:无锁->偏向锁->轻量级锁->重量级锁
无锁:
没有锁或者不加锁的情况。
偏向锁:
适用于只有一个线程访问同步块 ,对象头中的markword关键字指向对应当前线程id.并修改标志位,再次进入或退出不再进行CAS操作.不消耗额外cpu资源,所以速度快。
轻量级锁:
适应线程交替执行同步块的过程。轻度冲突,当进入代码块时,发现对象头markword中的线程id不是自己,然后尝试使用CAS进行修改,由于自旋会消耗大量cpu资源,因此如果经过一段时间还没有获取到对象锁,后会升级为重量级锁。
重量级锁:
适应于多个线程同时访问一个同步块的情况,对象会进入锁池进行等待,直到资源占用着执行完,再次进行竞争
网友评论