【发布时间】:2020-07-31 06:41:24
【问题描述】:
在创建监视器以管理对单个资源的访问的上下文中,我的教授给了我们以下代码:
private final Lock monitor;
private final Condition nonBusy;
private boolean busy;
// acquire resource
public void acquire() throws InterruptedException {
monitor.lock();
try {
while(busy)
nonBusy.await();
busy = true;
} finally {
monitor.unlock();
}
}
// release the previously acquired resource
public void release() {
monitor.lock();
try {
busy = false;
nonBusy.signal();
} finally {
monitor.unlock();
}
}
为什么在acquire操作结束时解锁而在释放operation开始时锁定?
如果我刚刚获得对资源的访问权限,为什么要释放我对它的锁定?
【问题讨论】:
-
你认为这里的资源是什么?为什么?
-
未指定。我认为 monitor.lock() 和 monitor.unlock() 会在那里,即使资源类型发生了变化。还是我错了?
-
让我换个说法:关键部分是什么?
-
try块内的代码 -
如果你去掉所有的锁定机制,它就是
busy。所以你获得了对资源的访问权,你使用了它,现在你已经完成了它,所以你释放了访问权。
标签: java multithreading locking