synchronized实现原理
2020-05-28 14:47:55 0 举报
synchronized实现原理
作者其他创作
大纲/内容
1 是
01
再尝试
CAS替换thread id
拷贝对象头中的mark word到原持有偏向锁线程的锁记录中
获得轻量级锁指向当前线程锁记录的指针|00
mutex挂起当前线程
自旋
自旋达到一定次数cas依然没有成功
未活动状态已退出同步代码块
cas操作将对象头的mark word 中锁记录指针指向当前线程锁记录
获得偏向锁thread id|epoch|1|01
0 否
唤醒原持有偏向锁的线程
检查对象头的mark word中的记录的是否是当前线程id
执行同步代码块
失败
开始新一轮锁竞争
目前锁状态
原持有偏向锁的线程的栈中分配锁记录
是否偏向锁
重量级锁10
原持有偏向锁的线程释放锁空|0|01
从安全点继续执行
当前线程继续检查
开始轻量级锁解锁
线程t访问同步代码块
当前线程
检查原线程状态
开始偏向锁撤销(等待竞争出现才释放锁的机制)
释放锁
成功
暂停原持有偏向锁的线程
是
当前线程的栈中分配锁记录
未退出同步代码块
原线程获得轻量级锁指向原线程锁记录的指针|00
转变为重量级锁指向重量级锁monitor的指针|10
原持有偏向锁的线程到达安全点
升级为重量级锁
唤醒被挂起的线程
不是
轻量级锁00
升级为轻量级锁
拷贝对象头中的mark word到当前线程的锁记录中
cas操作1.对象头中的mark word 中锁记录指针是否任然指向当前线程锁记录2.拷贝在当前线程锁记录的mark word信息是否与对象头中的mark word一致。
收藏
0 条评论
回复 删除
下一页