1. ホーム
  2. java

[解決済み] JavaにMutexはあるのか?

2022-03-02 10:40:57

質問

javaにMutexオブジェクトはありますか、またはそれを作成する方法はありますか? 1許可で初期化されたセマフォ・オブジェクトでは役に立たないので、質問しています。 このようなケースを考えてみてください。

try {
   semaphore.acquire();
   //do stuff
   semaphore.release();
} catch (Exception e) {
   semaphore.release();
}

最初の獲得時に例外が発生した場合、キャッチブロック内のリリースで許可証が増加し、セマフォはバイナリセマフォではなくなります。

正しい方法となるのでしょうか?

try {
   semaphore.acquire();
   //do stuff
} catch (Exception e) {
   //exception stuff
} finally {
   semaphore.release();
}

上記のコードで、セマフォがバイナリになることは確実でしょうか?

どのように解決するのですか?

このページをご覧ください。 http://www.oracle.com/technetwork/articles/javase/index-140767.html

これは、あなたが探しているものである(と私は思う)少し異なるパターンを持っています。

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

この使い方では release() が成功した後 acquire()