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();
}
上面的代码能确保信号量是二进制的吗?
发布于 2011-03-14 01:25:50
查看此页面:http://www.oracle.com/technetwork/articles/javase/index-140767.html
它有一个略微不同的模式,这(我认为)是你正在寻找的:
try {
mutex.acquire();
try {
// do something
} finally {
mutex.release();
}
} catch(InterruptedException ie) {
// ...
}
在这种用法中,您只能在acquire()
成功之后调用release()
发布于 2011-03-14 01:25:54
Java中的任何对象都可以使用synchronized
块作为锁。当发生异常时,这也会自动释放锁。
Object someObject = ...;
synchronized (someObject) {
...
}
你可以在这里阅读更多信息:Intrinsic Locks and Synchronization
发布于 2012-09-20 18:13:54
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
private final Lock _mutex = new ReentrantLock(true);
_mutex.lock();
// your protected code here
_mutex.unlock();
https://stackoverflow.com/questions/5291041
复制相似问题