【发布时间】:2020-08-09 22:34:52
【问题描述】:
在旧的同步块中,我们使用相同的对象进行同步,还使用了 wait 和 notify 方法。所以他们都可以引用同一个锁。有道理。
所以当我使用类 ReentrantLock 时,为什么我不能也使用相同的变量来调用 lock、unlock 以及 await 和信号?为什么我需要添加额外的 Condition 变量?
也就是说,为什么我需要这样做:
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
void doSomething() {
lock.lock();
//some code
condition.await();
//some code
lock.unlock();
}
而不是这个:(这种类型的编码不是更符合逻辑吗?
Lock lock = new ReentrantLock();
void doSomething() {
lock.lock();
//some code
lock.await();
//some code
lock.unlock();
}
编辑:来自文档:条件实例本质上绑定到锁。 为什么要这样设计?为什么不只拥有一个具有等待和信号方法的 Lock 类型变量?
【问题讨论】:
-
因为他们(Doug Lea)就是这样设计的。
标签: java multithreading locking locks