ホームページ >Java >&#&チュートリアル >項目 待機および通知する同時実行ユーティリティを優先する
モチベーション
java.util.concurrent の同時実行ユーティリティ
ユーティリティ カテゴリ:
競合コレクション
機能:
Map<String, String> map = new ConcurrentHashMap<>(); String result = map.putIfAbsent("key", "value"); if (result == null) { System.out.println("Valor inserido."); } else { System.out.println("Chave já existente com valor: " + result); }
利点:
シンクロナイザー
目的: スレッド間の調整。
一般的なシンクロナイザーの例:
実践例: CountDownLatch を使用した同時タイミング
目的: 複数のスレッドの実行時間を同時に測定します。
実装:
public static long time(Executor executor, int concurrency, Runnable action) throws InterruptedException { CountDownLatch ready = new CountDownLatch(concurrency); CountDownLatch start = new CountDownLatch(1); CountDownLatch done = new CountDownLatch(concurrency); for (int i = 0; i < concurrency; i++) { executor.execute(() -> { try { ready.countDown(); // Indica que está pronto start.await(); // Aguarda o sinal de início action.run(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { done.countDown(); // Indica que terminou } }); } ready.await(); // Aguarda todas as threads ficarem prontas long startTime = System.nanoTime(); start.countDown(); // Dispara o sinal de início done.await(); // Aguarda todas as threads finalizarem return System.nanoTime() - startTime; }
メモ:
待機と通知による現在の実践
従来のコードのメンテナンスにのみ必要です。
主なルール:
synchronized (lock) { while (!condition) { lock.wait(); } }
結論
本の例
以上が項目 待機および通知する同時実行ユーティリティを優先するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。