1. ホーム
  2. java

[解決済み】同期とロック

2022-04-18 20:14:58

質問

java.util.concurrent API では Lock これは基本的に、クリティカルなリソースにアクセスするためにコントロールをシリアライズするものです。これは、以下のようなメソッドを提供します。 park()unpark() .

を使えば、似たようなことができる。 synchronized キーワードを使用し wait()notify() notifyAll() メソッドを使用します。

実際のところ、どちらが良いのか、またその理由は何でしょうか?

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

単にオブジェクトをロックするだけなら、私は synchronized

Lock.acquire();
doSomethingNifty(); // Throws a NPE!
Lock.release(); // Oh noes, we never release the lock!

を明示的に行う必要があります。 try{} finally{} をすべて使用します。

一方、シンクロの場合は、超明確で間違えようがない。

synchronized(myObject) {
    doSomethingNifty();
}

それはそうと。 Lock の方が、取得と解放がきれいにできないような複雑なものには便利かもしれません。 正直なところ、素の Lock のような、より洗練された並行性制御を行うようにしましょう。 CyclicBarrier または LinkedBlockingQueue を使用することができます。

を使う理由がないんです。 wait() または notify() が、いいものがあるかもしれません。