【发布时间】:2012-03-30 13:52:19
【问题描述】:
如果我有代码:
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();
我是否正确,因为当调用 await 时释放了锁上的监视器,允许事件驱动线程 2 在需要时运行?如果线程 2 恰好运行,线程 1 何时能够在 signalAll() 或 lock.unlock() 时恢复?如果线程 2 发出唤醒信号,但仍然有锁,那它是如何工作的??
【问题讨论】:
标签: java concurrency