java并发编程学习笔记之锁分类

2018-04-27  本文已影响29人  一人_e0fb

关键词:

    cas: 乐观锁机制,当写时数据的状态与读时数据的状态不一致时,写失败。

锁的优缺点对比:

偏向锁:

    正常场景中总是单个线程重复访问某个同步代码块,为了优化这一场景下的程序,偏向锁在线程执行完后不释放锁,即不修改对象头中的mark word中锁指向的线程为null,而是在其他线程想要访问时,通过暂停线程检查是否存活来释放锁。

轻量级锁:

    轻量级锁通过自旋的方式重复获取锁,先在栈中分配空间将对象mark word 状态复制一份保存,然后通过cas修改对象的mark word获取锁,

获取失败会自旋一直获取,当释放锁时将mark word状态还原,如果状态不一致,说明锁升级为重量级锁,唤醒阻塞线程。

重量级锁:

    自旋需要消耗cpu资源,如果多个线程一直自旋是在消耗cpu资源,重量级锁通过阻塞的方式来等待锁的释放,当锁释放后唤醒线程来实现新一轮的竞争锁。

上一篇 下一篇

猜你喜欢

热点阅读