CountDownLatch
はマルチスレッド同期ツール クラスであり、マルチスレッド環境では、前のスレッドの実行が終了するまで複数のスレッドが待機できるようになります。クラス名から判断すると、CountDown
は数値をデクリメントすることを意味しており、カウンターとして理解できます。
countDown()
: カウンタデクリメントメソッド。
await()
: このメソッドを呼び出すスレッドを待機状態にします。カウンタが 0 に達するまでメイン スレッドは起動されません。
await(long, TimeUnit)
: await()
メソッドに基づいてタイムアウト戦略が追加されます。その結果、メインスレッドが直接起動されて実行されます。
ここでは、簡単なコードを使用して説明します。上記のコードでは、値 3 と 3 つのスレッドを同時に実行する CountDownLatch
カウンタを作成しました。countDownLatch.await() メソッドがメイン スレッドで呼び出され、メイン スレッドがブロッキングに入ります。 3 つのスレッド タスクが実行された後、
countDownLatch.countDown() メソッドが呼び出され、カウンターがデクリメントされます。3 つのスレッド タスクがすべて実行されると、カウンター値は 0 に達し、メイン スレッドが起動されます。
カウンター値は、CountDownLatch インスタンスの作成時に定義する必要があります。一般に、比較的合理的な使用法は、値の定義に合理的な値が必要であることです。計算。カウント値は、並列化する必要があるスレッドの数に等しくなります。各スレッドが完了すると、カウントはデクリメントされ、最終的にメイン スレッドが起動されて実行を継続します。
await() は 1 つのスレッドまたは複数のスレッドをブロックできます。複数のスレッドがブロックされている場合、カウントは 0 になり、ブロックされているすべてのスレッドがウェイクアップされます。スレッド。
シナリオを使用する
現在の状況では、多くのプラットフォームが取引をUnionPay、WeChat、Alipayなどの支払いチャネルに接続するため、調整は避けられません。調整は通常毎日早朝に処理されますが、一方で、ほとんどのプラットフォームでは早朝の時間帯はアクセスが少なく、サーバーの負荷が比較的緩和されており、現時点ではアカウントがより合理的であるため、大量のデータ量の計算操作。
CountDownLatch を使用して、調整ファイルを同時に取得する 3 つのタスクを設計できます。メイン スレッドをブロックし、3 つのタスクすべてがファイルを取得するのを待ち、カウントをデクリメントします。最後に、メイン スレッドが起動すると、この段階の処理の完了がマークされ、次の段階に入る通知が開始されます。
CountDownLatch を使用して 3 つのスレッドを開始し、それぞれの調整ファイルを解析し、最終的にファイルを変換できます。コンテンツはビジネスに必要な統一された形式のデータに変換され、データベースに保存されます。3 つのタスクがすべてデータベースに保存されると、メインスレッドが起動されて完了としてマークされ、次のステージに作業を開始するよう通知します。
調整と決済 (第 3 段階): 前段階のデータがデータベースに入力された後、この段階で行う必要があるのは、各取引が取引内容に該当するかどうかを比較することです。一般に、取引金額は注文番号と取引チャネルに基づいて比較され、金額が一致していれば正常に決済され、一致していなければ異常取引としてデータベースに保存されて処理されます。上記のプロセス分析から、比較的合理的な CountDownLatch
カウントを設計し、それを Semaphore
セマフォと組み合わせて同時実行性を制御し、比較トランザクション注文を同時に処理して、最終的にすべてのトランザクション注文を処理し、メイン スレッドを起動して調整の完了をマークし、次のステージに会計処理を続行するよう通知します。
アカウントの発行 (第 4 段階) : 通常、プラットフォームは調整が完了した後にアカウントを発行します。つまり、次のとおりに関連する請求書を発行すると便利です。プラットフォームのビジネス ルール 財務スタッフが統計を実行します。
以上がJavaマルチスレッド同期ツールクラスCountDownLatchの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。