一尘不染

Java中是否有Mutex?

java

Java中是否有Mutex对象或一种创建对象的方法?我问是因为用1许可初始化的Semaphore对象对我没有帮助。考虑这种情况:

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();
}

上面的代码是否可以确保信号量是二进制的?


阅读 386

收藏
2020-09-08

共1个答案

一尘不染

看到此页面:http
:
//www.oracle.com/technetwork/articles/javase/index-140767.html

它有一个稍微不同的模式,这是(我认为)您要寻找的内容:

try {
  mutex.acquire();
  try {
    // do something
  } finally {
    mutex.release();
  }
} catch(InterruptedException ie) {
  // ...
}

在这种用法中,您仅release()在成功呼叫之后acquire()

2020-09-08