2
放開。如果我的代碼:當顯示器用Java
ReentrantLock lock = new ReentrantLock();
Condition waiting = lock.newCondition();
主題1:
value = default;
lock.lock();
try {
waiting.await(new Long(timeout).longValue(), TimeUnit.SECONDS);
} catch (InterruptedException e) {
} finally {
lock.unlock();
}
線程2:
lock.lock();
//set value
waiting.signalAll();
lock.unlock();
我是正確的監視器上在等待被調用時釋放鎖,允許事件驅動線程2在需要時運行?如果線程2碰巧運行,線程1什麼時候能夠恢復,在signalAll()或lock.unlock()上?如果線程2發信號喚醒,但仍然有一個鎖,這是如何工作的?
感謝您的信息,我想我是混合起來的術語舊/新way-之間的一點點,但它看起來像它的同一個基本的想法,但一個是使用顯示器和其他鎖/條件。 – GBa 2012-03-30 14:04:12
那是真的,那是兩種不同的機制。無論如何,如果你使用監視器,你應該在同步(監視)塊內編寫你的代碼,所以你不會有IllegalMonitorStateException。 – 2012-03-30 14:04:17
@WillDen你說得對,它是一個基本的想法,'synchronized'和'ReentrantLock'具有相同的語義。 – 2012-03-30 14:10:21