【发布时间】:2011-07-14 13:05:17
【问题描述】:
在 java 中是否有 Mutex 对象或创建方法? 我问是因为用 1 个许可初始化的信号量对象对我没有帮助。 想想这个案例:
try {
semaphore.acquire();
//do stuff
semaphore.release();
} catch (Exception e) {
semaphore.release();
}
如果在第一次获取时发生异常,catch 块中的释放将增加许可,信号量不再是二进制信号量。
正确的方法是什么?
try {
semaphore.acquire();
//do stuff
} catch (Exception e) {
//exception stuff
} finally {
semaphore.release();
}
上面的代码会保证信号量是二进制的吗?
【问题讨论】:
-
查看 java.util.concurrent.locks.AbstractQueuedSynchronizer 的 javadoc。它有一个如何编写 Mutex 类的示例。 -dbednar
-
您是否凭经验发现了这种行为?实现是否在 1-permit Semaphore 上执行 release() 会添加额外的许可,即使它当前持有另一个许可,真的吗?
标签: java mutex semaphore java.util.concurrent concurrent-programming