Javaの同時実行ユーティリティ: Semaphore, CountDownLatch, CyclicBarrierの応用と原理
Semaphoreの使用と原理
概要
適用シナリオ:同時に共有リソースにアクセスできるスレッドの上限を制限するために使用されます。
例:各時点で最大3つのスレッドがリソースにアクセスする
package concurrency.example;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.Semaphore;
@Slf4j(topic = "c.ResourceLimiterExample")
public class ResourceLim ...
7月28日 16:37 投稿
Javaの並行処理ユーティリティ:CountDownLatchとCyclicBarrierの使い方
CountDownLatchの概要
CountDownLatchは、スレッド間の同期を支援するためのユーティリティクラスです。このクラスは、一つまたは複数のスレッドが、他のスレッドが特定の操作を完了するのを待つことができるように設計されています。名前の通り、カウントダウン式のロックであり、指定された回数の「カウントダウン」が完了するまで、待機するスレッドをブロックします。 ...
7月2日 21:13 投稿
スレッドプールのタスク調整と共有データの取り扱い
スレッド間の通信と同期
1. スレッドAが完了した後にスレッドBを実行する
/**
* Aが完了した後にBを実行
*/
@Test
public void bWaitA() {
Thread A = new Thread(() -> {
System.out.println("A: 作業開始!!");
System.out.println("A: 作業終了!!");
});
Thread B = new Thread(() ...
6月19日 22:15 投稿
CountDownLatchによるスレッド間の同期制御
複数の非同期タスクがすべて終了した後で次の処理を開始したい場合、CountDownLatchを使うと簡潔に記述できる。内部的には「残りタスク数」を管理するカウンタを持ち、各タスクは完了時にcountDown()でカウンタをデクリメントし、待機側はawait()でカウンタがゼロになるまでブロックされる。
主要APIの概要
コンストラクタ
CountDownLatch latch = new CountDownLatch(並 ...
6月16日 19:15 投稿