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

20 篇文章 0 订阅

Condition 接口 :

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

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

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

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

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

非常典型的等待超时模式,可以理解一下

signal 唤醒操作

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值