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();
}
上記のコードにより、セマフォがバイナリになることが保証されますか?
ベストアンサー1
Java の任意のオブジェクトは、ブロックを使用してロックとして使用できますsynchronized
。これにより、例外が発生したときにロックが自動的に解放されます。
Object someObject = ...;
synchronized (someObject) {
...
}
詳細については、こちらをご覧ください:固有のロックと同期