【发布时间】:2014-06-06 17:32:11
【问题描述】:
我不确定以下实现是否正确。我的原因是,如果当前线程在等待发出信号时被中断,finally 块将被调用,但由于它没有持有锁,IllegalMonitorStateException 将被抛出。在这种情况下,我是否正确实现了 try-finally 块,还是应该实现一个?
public void acquire() throws InterruptedException {
try {
lock.lockInterruptibly();
while (permits == 0) {
condition.await();
}
permits--;
}
finally {
lock.unlock();
}
}
【问题讨论】:
-
不正确,为什么不用监视器?
-
...我敢指出
java.util.concurrent.Semaphore已经存在吗? -
我正在使用
ReentrantLock和Condition实现信号量。这是一个任务。 -
@BJPeterDeLaCruz 您应该被告知,您必须在没有他人帮助的情况下自己完成作业,否则将被视为作弊。
-
@RomanC 感谢您的建议。放心,我已经完成了任务。 :) 但我不确定这个案子。
标签: java concurrency semaphore