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

文章插圖

推薦閱讀