synchronized竞争过程
2019-02-03 16:59:31 0 举报
synchronized竞争过程
作者其他创作
大纲/内容
若entrylist为空并且cxq不为空的情况下取出cxq中head节点放入entrylist中
mointorexit
WaitSet(等待队列ObjectMonitor中的_WaitSet属性)
3
EntryList2Q(两个队列)
CXQ/EntryList
monitorenter
放入阻塞队列
没有获取对象监视器的线程
4
拥有锁的现场释放锁,再从entrylist中取出一个线程,让这个线程去竞争锁
5
monitorenter成功
2
monitorexit
lock.notify()
mointorexit之后,通知队列中的ObjectWaiter出队列去竞争监视器锁
thread.notify()
thread.wait()
cxq(LIFO)
OwerThread
1
->自旋->park
EntryList出队列的ObjectWaiter若竞争锁失败则继续在队列中等待
1、wait和notify为什么要先获取锁?2、wait和sleep的区别?
synchronized升级为重量级锁之后的流程
lock.wait()
CXQ/EntryList(ObjectMonitor中的_cxq和_EntryList)
park()释放锁
Monitor
Object
唤醒线程
cas操作
0 条评论
下一页