Lock.Condition
2021-11-04 18:11:25 3 举报
线程通信
作者其他创作
大纲/内容
成功
结束
当前线程是否持有锁,因为只有持有锁才可以解锁
CAS设置当前节点的waitStatus为0
N
throw new IllegalMonitorStateException();
是否已经被唤醒加入到同步队列
如果是null,说明当前没有等待节点,什么都不做,方法结束
线程是否被中断
LockSupport.park(this);当前线程阻塞进入等待状态
将当前节点用CAS的方式放到同步队列尾部
尝试竞争锁
当前线程加入等待队列中
检查等待队列中的第一个节点是不是null
throw new InterruptedException()
失败
await()
唤醒下一个同步队列节点
将当前节点,也就是等待队列首节点移出等待队列并设置此节点的下一个节点为新的等待队列首节点
Y
是否设置中断标记
while( ! 是否被唤醒加入同步队列){ 阻塞当前线程; if(当前线程被中断){ break; }}
signal()
释放锁
0 条评论
下一页