java进阶-7-D -多线程-Lock专题- Condition 介绍

Condition 接口 :

java进阶-7-D -多线程-Lock专题- Condition 介绍

很明显里面的额方法其实就2种,一种是等待, 一种是唤醒    

await表示等待 ,更具传入的参数不同,能够实现的功能也不同:

await() 进入等待状态  
awaitNanos(long) 进入等待状态 多长时间之后自动苏醒  
await(long,TimeUnit) 同上  
awaitUnit(Date) 进入等待状态知道某一个时间点  
awaitUninterruptibly() 进入等待状态只能被interrupt唤醒  

在AQS里面有一个ConditionObject 类 实现了该接口 :

在await()方法中 找到 LockSupport.park(this) ,这个类又是应用了LockSupport,看来Lock这一块内部的切换到阻塞状态全都是靠SupportLock这个类来完成的。

java进阶-7-D -多线程-Lock专题- Condition 介绍非常典型的等待超时模式,可以理解一下

signal 唤醒操作

signal() 唤醒该condition的某一个await  
signalAll() 唤醒该condition的所有await  

唤醒操作其实在Object类中也有几个方法功能上有相似点,都是等待 ~~ 唤醒 ,但是Object 争对的永远都是应用内所有的线程,而Condition只是针对当前该实例内的等待单位,  所以一般情况下 Object 我们习惯用 notifyAll ,而Condition 我们设计成只正对某一类的等待,每次也许就唤醒一个就好了,所以一般使用的是signal 唤醒某一个 。

java进阶-7-D -多线程-Lock专题- Condition 介绍

java进阶-7-D -多线程-Lock专题- Condition 介绍