ホームページ Java &#&チュートリアル Java 同時実行における CountDownLatch と CyclicBarrier の違いは何ですか?

Java 同時実行における CountDownLatch と CyclicBarrier の違いは何ですか?

Sep 06, 2023 pm 03:33 PM
cyclicbarrier countdownlatch Javaの同時実行性

Java 同時実行における CountDownLatch と CyclicBarrier の違いは何ですか?

CountDownLatch と CyclicBarrier はどちらもマルチスレッド環境で使用され、その一部です。

Java Doc によると -

CountDownLatch - 他のスレッドで実行された一連の操作が完了するまで 1 つ以上のスレッドを待機できるようにする同期補助。

CyclicBarrier - スレッドのグループが共通のバリア ポイントに到達するまで相互に待機できるようにする同期補助。

#紳士諸君。 No.KeyCyclicBarrierCountDownLatch2実行中Runnable を提供できるコンストラクターがあります。 そのようなコンストラクターはありません3Thread / taskスレッド数を維持しますタスク数を維持します tr>4.5#InterruptedException をスローし、他のスレッドには影響しません#CyclicBarrier の例
public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
      executors.submit(new Service1(cyclicBarrier));
      executors.submit(new Service1(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      executors.submit(new Service2(cyclicBarrier));
      Thread.sleep(3000);
      System.out.println("Done");
   }
}
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Service1 implements Runnable {
   CyclicBarrier cyclicBarrier;
   public Service1(CyclicBarrier cyclicBarrier) {
      super();
      this.cyclicBarrier = cyclicBarrier;
   }
   @Override
   public void run() {
      System.out.println("Services1" + cyclicBarrier.getNumberWaiting());
      while (true) {
         try {
            cyclicBarrier.await();
         } catch (InterruptedException | BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Service2 implements Runnable {
   CyclicBarrier cyclicBarrier;
   public Service2(CyclicBarrier cyclicBarrier) {
      super();
      this.cyclicBarrier = cyclicBarrier;
   }
   @Override
   public void run() {
      System.out.println("Services2" + cyclicBarrier.getNumberWaiting());
      while (true) {
         try {
            cyclicBarrier.await();
         } catch (InterruptedException | BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
   }
}
ログイン後にコピー
CountDownLatch の例
1

#Basic

共通の障害点に到達するのをすべて待機しているスレッドのグループの同期を可能にします。

他のスレッドで実行された一連の操作が完了するまで 1 つ以上のスレッドが待機できるようにする同期補助。

##高度な拡張が可能です

使用はお勧めしません

使用することをお勧めします使用します。

例外

スレッドがブロックされている間にスレッドがブロックされた場合待機中 中断されると、待機中の他のすべてのスレッドが BrokenBarrierException をスローします。

現在のスレッドのみが

public class Main {
   public static void main(String args[]) throws InterruptedException {
      ExecutorService executors = Executors.newFixedThreadPool(4);
      CountDownLatch latch= new CountDownLatch(2);
      executors.submit(new Service1(latch));
      executors.submit(new Service2(latch));
      latch.await();
      System.out.println("Done");
   }
}
import java.util.concurrent.CountDownLatch;

public class Service1 implements Runnable {

   CountDownLatch latch;
   public Service1(CountDownLatch latch) {
      super();
      this.latch = latch;
   }

   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
import java.util.concurrent.CountDownLatch;
public class Service2 implements Runnable {
   CountDownLatch latch;
   public Service2(CountDownLatch latch) {
      super();
      this.latch = latch;
   }
   @Override
   public void run() {
      try {
         Thread.sleep(20000);
      } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      latch.countDown();
      System.out.println("Services2"+latch.getCount());
   }
}
ログイン後にコピー

以上がJava 同時実行における CountDownLatch と CyclicBarrier の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaバックエンド関数の開発で同時アクセスを処理するにはどうすればよいですか? Javaバックエンド関数の開発で同時アクセスを処理するにはどうすればよいですか? Aug 04, 2023 pm 08:22 PM

Javaバックエンド関数の開発で同時アクセスを処理するにはどうすればよいですか?最新のインターネット アプリケーションでは、高い同時アクセスが共通の課題となっています。複数のユーザーがバックエンド サービスに同時にアクセスする場合、同時実行性が正しく処理されないと、データの一貫性、パフォーマンス、セキュリティなどの問題が発生する可能性があります。この記事では、Java バックエンド開発における同時アクセスを処理するためのベスト プラクティスをいくつか紹介します。 1. スレッド同期を使用する Java は、同時アクセスを処理するためのさまざまなメカニズムを提供します。その中で最も一般的に使用されるのはスレッド同期です。キーコードブロックまたはメソッドの前に同期を追加する

Java 関数の同時実行性とマルチスレッドで Fork/Join フレームワークを使用するにはどうすればよいですか? Java 関数の同時実行性とマルチスレッドで Fork/Join フレームワークを使用するにはどうすればよいですか? Apr 27, 2024 am 10:09 AM

Java の Fork/Join フレームワークを使用して並列タスクを作成するにはどうすればよいですか?タスクのロジックを定義し、結果を計算したり、アクションを実行したりします。並列スレッドを管理するために ForkJoinPool を作成します。 fork() メソッドを使用してタスクを送信します。 join() メソッドを使用してタスクの結果を取得します。

Java 同時実行におけるリフレクション メカニズムの適用? Java 同時実行におけるリフレクション メカニズムの適用? Apr 15, 2024 pm 09:03 PM

回答: リフレクション メカニズムにより、Java プログラムはリフレクション API を通じて実行時にクラスとオブジェクトを検査および変更できるようになります。これを使用して、Java 同時実行で柔軟な同時実行メカニズムを実装できます。アプリケーション: スレッドを動的に作成します。スレッドの優先順位を動的に変更します。依存関係を注入します。

修正方法: Java 同時実行エラー: デッドロック検出 修正方法: Java 同時実行エラー: デッドロック検出 Aug 25, 2023 pm 10:03 PM

解決方法: Java 同時実行エラー: デッドロック検出 デッドロックは、マルチスレッド プログラミングにおける一般的な問題です。デッドロックは、2 つ以上のスレッドが互いにロックされたリソースを解放するのを待機すると発生します。デッドロックによりスレッドがブロックされ、リソースが解放されず、プログラムの実行が続行できなくなり、システム障害が発生します。この問題を解決するために、Java はデッドロック検出メカニズムを提供します。デッドロック検出では、スレッド間の依存関係やリソースアプリケーションのキューイング状況を確認することでデッドロックの有無を判定し、デッドロックが発見された場合には対応する措置を講じます。

Java 関数の同時実行性とマルチスレッドにおけるブロックキューの役割は何ですか? Java 関数の同時実行性とマルチスレッドにおけるブロックキューの役割は何ですか? Apr 27, 2024 am 09:30 AM

ブロッキング キュー: 同時実行とマルチスレッドのための強力なツール ブロッキング キューは、同時実行およびマルチスレッド プログラミングで次の重要な役割を果たすスレッドセーフ キューです。 スレッド同期: 操作をブロックすることで競合状態やデータの不整合を防ぎます。データ バッファー: データ バッファーとして、プロデューサーとコンシューマーのスレッド速度の不一致の問題を軽減します。負荷分散: キュー内の要素の数を制御し、プロデューサーとコンシューマーの負荷のバランスをとります。

Java CountDownLatch カウンターと CyclicBarrier サイクル バリアを定義する方法 Java CountDownLatch カウンターと CyclicBarrier サイクル バリアを定義する方法 May 21, 2023 pm 06:25 PM

定義 CountDownLatch: 他のスレッドで実行されている操作が完了するまで 1 つまたは複数のスレッドが待機できるようにする非同期補助 CyclicBarrier: 共通のバリアポイントに到達するまでスレッドのセットをすべて待機できるようにする非同期補助 上記は Oracle の公式定義です。簡単に言うとC

JavaでCyclicBarrierサイクルバリアを適用する方法 JavaでCyclicBarrierサイクルバリアを適用する方法 May 12, 2023 pm 02:19 PM

1. はじめに CyclicBarrier は文字通りループ バリア (循環バリア) を意味し、スレッドのグループを特定の状態 (バリア ポイント) まで待機させ、その後すべてを同時に実行できます。待機中のスレッドがすべて解放された後に CyclicBarrier を再利用できるため、これはループバックと呼ばれます。 CyclicBarrier の機能は、スレッドのグループを相互に待機させることです。共通点に達すると、それまで待機していたすべてのスレッドが実行を継続し、CyclicBarrier 関数を再利用できます。 2. CyclicBarrier の構築メソッド: //parties はバリアによってインターセプトされたスレッドの数を表し、各スレッドは await メソッドを呼び出して CyclicBarrier が何であるかを伝えます。

Java で CyclicBarrier を使用して高い同時実行性を実現する方法 Java で CyclicBarrier を使用して高い同時実行性を実現する方法 Apr 14, 2023 pm 07:07 PM

Java の CyclicBarrier は、すべてのスレッドがバリアに到達するまで実行を続行できるようになるまで、複数のスレッドがバリアで待機できるようにする同期ツールです。 CyclicBarrier を使用すると、複数のスレッドの実行を調整し、特定の時点で同時に実行できるようになります。 CyclicBarrier は、実行を続行する前に、すべてのスレッドがバリア ポイントに到達するまで、複数のスレッドがバリア ポイントで待機できるようにする Java の同期ツールです。 CyclicBarrier を使用すると、複数のスレッドの実行を調整し、特定の時点で同時に実行できるようになります。サイクリックバーの使い方

See all articles