一:Condition详解
Conditon提供了线程协作的更多的更丰富的API帮助,其本身是对Object的await()、notitify()方法的扩展。
首先我们来看一下Condition的方法:
COndititon是实现AQS中的ConditonObject的。
二:Condition的await()
该方法设置获取倒锁的线程从运行状态转变为等待状态,其主要的流程如下:
- 将当前线程包装成Node节点,加入FIFO等待队列
- 释放当前线程锁
(1)await()方法
public final void await() throws InterruptedException {
if (Thread.interrupted())
throw new InterruptedException();
//将当前线程包装成节点,插入等待队列
Node node = addConditionWaiter();
//释放锁
int savedState = fullyRelease(node);
int interruptMode = 0;
//判断当前线程节点是否在等待队列
while (!isOnSyncQueue(node)) {
LockSupport.park(this);
if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
break;
}
if (acquireQue