synchronized 和 volatile

synchronezed进出同步代码块时会进行内核态到用户态的切换,所以1.8进行了优化将锁分为4个级别:无锁、偏向锁、轻量级锁、重量级锁(对象头的Mark Word里做标记)无锁->偏向锁 一个线程看到对象头的无锁标记时,就把自己的线程ID写入,变成偏向锁,把原先的保存在栈中备份; 偏向锁->轻量级锁 线程发现偏向锁中的ID与自己一致时,无额外操作,直接进入同步块; 不一致时,进行CAS尝试修改线程ID为自己的,修改失败,锁升级为轻量级锁 轻量级锁->重量
摘要由CSDN通过智能技术生成

synchronezed

进出同步代码块时会进行内核态到用户态的切换,所以1.8进行了优化,将锁分为4个级别:无锁、偏向锁、轻量级锁、重量级锁(对象头的Mark Word里做标记)

Mark Word中标志 存储内容
01,0 未锁 hashCode、分代
01,1 可偏向锁 偏向第一个访问的线程线id、时间戳
00 轻量锁 指向栈帧中的锁记录
10 重量锁 互斥锁,指向ObjectMonitor(有阻塞队列WaitSet, 等待队列EntryList, owner, count)
11 GC标记  

 

  • 无锁->偏向锁
    • 一个线程看到对象头的无锁标记时,就CAS把自己的线程ID写入Mark Word,变成偏向锁,把原先的保存在栈中备份;
  • 无锁->轻量级锁(未开启偏向)
    • 发现未锁,拷贝Mark Word到自己的锁记录中,CAS更新Mark Word指向锁记录
      • 成功——》持有轻量锁
      • 失败——》检测Mark Word是否指向自己的栈
        • 指向ÿ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值