ホームページ >Java >&#&チュートリアル >Javaマルチスレッド同期ツールクラスCountDownLatchの使用方法

Javaマルチスレッド同期ツールクラスCountDownLatchの使用方法

王林
王林転載
2023-05-25 10:22:471044ブラウズ

はじめに

CountDownLatch はマルチスレッド同期ツール クラスであり、マルチスレッド環境では、前のスレッドの実行が終了するまで複数のスレッドが待機できるようになります。クラス名から判断すると、CountDown は数値をデクリメントすることを意味しており、カウンターとして理解できます。

コアメソッド

  • countDown(): カウンタデクリメントメソッド。

  • await(): このメソッドを呼び出すスレッドを待機状態にします。カウンタが 0 に達するまでメイン スレッドは起動されません。

  • await(long, TimeUnit): await() メソッドに基づいてタイムアウト戦略が追加されます。その結果、メインスレッドが直接起動されて実行されます。

CountDownLatch の使用方法

ここでは、簡単なコードを使用して説明します。上記のコードでは、値 3 と 3 つのスレッドを同時に実行する CountDownLatch

カウンタを作成しました。

countDownLatch.await() メソッドがメイン スレッドで呼び出され、メイン スレッドがブロッキングに入ります。 3 つのスレッド タスクが実行された後、countDownLatch.countDown() メソッドが呼び出され、カウンターがデクリメントされます。3 つのスレッド タスクがすべて実行されると、カウンター値は 0 に達し、メイン スレッドが起動されます。

注:
カウンター値は、

CountDownLatch インスタンスの作成時に定義する必要があります。一般に、比較的合理的な使用法は、値の定義に合理的な値が必要であることです。計算。カウント値は、並列化する必要があるスレッドの数に等しくなります。各スレッドが完了すると、カウントはデクリメントされ、最終的にメイン スレッドが起動されて実行を継続します。

    CountDownLatch
  • カウント値がスレッド数より大きく設定されている場合、最終的にすべてのスレッドが実行を終了し、カウントは次のように減少します。 0 の場合、メインスレッドは常に待機状態になります。

  • CountDownLatch
  • カウント値が同時スレッド数よりも小さく設定されている場合、一部のスレッドが実行を完了する前にカウントが 0 に減分される可能性があります。そしてメインスレッドが進められます。

    CountDownLatch 操作プロセス
下図に示すように、メイン スレッドのブロックと起動の中心はカウンタであり、すべてのスレッドが実行を完了し、カウントは 1 つずつデクリメントされ、最終的に目覚めます

await()

メイン スレッドがブロックされています。

注:

await() は 1 つのスレッドまたは複数のスレッドをブロックできます。複数のスレッドがブロックされている場合、カウントは 0 になり、ブロックされているすべてのスレッドがウェイクアップされます。スレッド。

シナリオを使用するJavaマルチスレッド同期ツールクラスCountDownLatchの使用方法

CountDownLatch

の役割を簡単に理解した後、最終的な目標は、その方法を理解することだと思います。次に、照合ビジネス シナリオを取り上げて、それを詳細に分析します。

現在の状況では、多くのプラットフォームが取引をUnionPay、WeChat、Alipayなどの支払いチャネルに接続するため、調整は避けられません。調整は通常毎日早朝に処理されますが、一方で、ほとんどのプラットフォームでは早朝の時間帯はアクセスが少なく、サーバーの負荷が比較的緩和されており、現時点ではアカウントがより合理的であるため、大量のデータ量の計算操作。

上記の点については言及されていないようですが、照合処理を行う前に、まずさまざまな支払いチャネルを通じて明細ファイルを取得する必要があります。

    調整ファイルのダウンロード (最初のフェーズ)
  • : この場合、

    CountDownLatch を使用して、調整ファイルを同時に取得する 3 つのタスクを設計できます。メイン スレッドをブロックし、3 つのタスクすべてがファイルを取得するのを待ち、カウントをデクリメントします。最後に、メイン スレッドが起動すると、この段階の処理の完了がマークされ、次の段階に入る通知が開始されます。

  • リコンシリエーション ファイルの解析 (第 2 フェーズ)
  • : 前の段階でダウンロードされたファイル内で、この段階で行う必要があるのは、ファイル。 3 つのチャネルはメーカーが異なるため、ファイルのコンテンツ形式は異なる必要があります。この時点で、

    CountDownLatch を使用して 3 つのスレッドを開始し、それぞれの調整ファイルを解析し、最終的にファイルを変換できます。コンテンツはビジネスに必要な統一された形式のデータに変換され、データベースに保存されます。3 つのタスクがすべてデータベースに保存されると、メインスレッドが起動されて完了としてマークされ、次のステージに作業を開始するよう通知します。

  • 調整と決済 (第 3 段階): 前段階のデータがデータベースに入力された後、この段階で行う必要があるのは、各取引が取引内容に該当するかどうかを比較することです。一般に、取引金額は注文番号と取引チャネルに基づいて比較され、金額が一致していれば正常に決済され、一致していなければ異常取引としてデータベースに保存されて処理されます。上記のプロセス分析から、比較的合理的な CountDownLatch カウントを設計し、それを Semaphore セマフォと組み合わせて同時実行性を制御し、比較トランザクション注文を同時に処理して、最終的にすべてのトランザクション注文を処理し、メイン スレッドを起動して調整の完了をマークし、次のステージに会計処理を続行するよう通知します。

  • アカウントの発行 (第 4 段階) : 通常、プラットフォームは調整が完了した後にアカウントを発行します。つまり、次のとおりに関連する請求書を発行すると便利です。プラットフォームのビジネス ルール 財務スタッフが統計を実行します。

以上がJavaマルチスレッド同期ツールクラスCountDownLatchの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。