同期: ロックと同期キーワード
Java では、複数のスレッドが確実に共有リソースにアクセスできるように、同期などのメカニズムを通じて同時実行性が管理されます。制御された方法。 java.util.concurrent API の主要なクラスの 1 つは Lock で、これは重要なリソースにアクセスするための制御をシリアル化します。スレッド同期用に park() や unpark() などのメソッドが提供されます。
あるいは、synchronized キーワードを同期に使用することもできます。 wait() メソッドと、notify() または NoticeAll() メソッドを使用して、スレッド アクセスを制御します。どちらのメカニズムも同様の機能を提供しますが、次のような疑問が生じます。どちらのアプローチがより実用的ですか?
ロックと同期キーワードの比較
単純なオブジェクトのロックを扱う場合、同期一般に、その単純さと明瞭さの点で好まれます。次の例は、Lock を使用する潜在的なリスクを示しています。
Lock.acquire(); doSomethingNifty(); // Throws a NPE! Lock.release(); // Oh noes, we never release the lock!
ロックを正しく解放するには try-finally ブロック内で明示的に解放する必要があるため、このコードはエラーを引き起こす可能性があります。
一方、synchronized は、ロックを処理するためのより簡単で安全な方法を提供します。
synchronized(myObject) { doSomethingNifty(); }
ここでは、synchronized ブロックを終了するときにロックが自動的に解放されるため、ロックの解放を忘れる可能性が排除されます。
ロックを使用する場合
ほとんどのロックのニーズには同期で十分ですが、クリーンな方法でロックを取得および解放する必要がある、より複雑なシナリオではロックが利点を提供します。挑戦的。ただし、ほとんどの実用的なアプリケーションでは、裸の Lock の代わりに、CyclicBarrier や LinkedBlockingQueue などのより高度な同時実行制御メカニズムの使用を検討することをお勧めします。
結論
Lock のどちらかを選択する場合および同期されるかどうかは、同期要件の複雑さに応じて決定されます。単純なロック操作の場合、同期はユーザーフレンドリーで簡単なアプローチを提供します。ただし、より複雑なシナリオの場合、ロックはより優れた柔軟性とカスタマイズを提供する可能性があります。
以上がロックと同期のキーワード: Java の同時実行にはどちらが最適ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。