locklock水杯 locklock( 二 )


await时间为:1443970329524signal时间为:1443970332524await等待结束差值是3000毫秒也就是3秒,符合代码预期,成功利用ReentrantLock的Condition实现了等待/通知模型 。其实这个例子还证明了一点,Condition的await() *** 是释放锁的,原因也很简单,要是await() *** 不释放锁,那么signal() *** 又怎么能调用到Condition的signal() *** 呢?
注意要是用一个Condition的话,那么多个线程被该Condition给await()后,调用Condition的signalAll() *** 唤醒的是所有的线程 。如果想单独唤醒部分线程该怎么办呢?new出多个Condition就可以了,这样也有助于提升程序运行的效率 。使用多个Condition的场景是很常见的,像ArrayBlockingQueue里就有 。

locklock水杯  locklock

文章插图

推荐阅读