CyclicBarrier는 스레드 집합이 모두 서로가 공통 장벽 지점에 도달할 때까지 기다릴 수 있도록 하는 동기화 보조 장치입니다. 모든 스레드가 장벽에 도달하면 해당 스레드가 해제되어 작업을 계속합니다. 대기 중인 스레드가 해제된 후에 재사용할 수 있기 때문에 장벽을 "순환"이라고 합니다.
CyclicBarrier의 작동 방식을 더 잘 이해하기 위해 실제 예제와 데모를 살펴보겠습니다.
다음은 CyclicBarrier 사용을 보여주는 간단한 예입니다.
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class CyclicBarrierDemo { public static void main(String[] args) { final int numberOfThreads = 3; CyclicBarrier barrier = new CyclicBarrier(numberOfThreads, new BarrierAction()); for (int i = 0; i < numberOfThreads; i++) { new Thread(new Task(barrier)).start(); } } } class Task implements Runnable { private final CyclicBarrier barrier; Task(CyclicBarrier barrier) { this.barrier = barrier; } @Override public void run() { try { System.out.println(Thread.currentThread().getName() + " is waiting at the barrier."); barrier.await(); System.out.println(Thread.currentThread().getName() + " has passed the barrier."); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } } class BarrierAction implements Runnable { @Override public void run() { System.out.println("Barrier Action executed. All threads are released."); } }
위 코드를 실행하면 다음 순서를 관찰하게 됩니다.
다음은 출력 예입니다.
Thread-0 is waiting at the barrier. Thread-1 is waiting at the barrier. Thread-2 is waiting at the barrier. Barrier Action executed. All threads are released. Thread-0 has passed the barrier. Thread-1 has passed the barrier. Thread-2 has passed the barrier.
CyclicBarrier는 Java에서 여러 스레드를 조정하는 데 유용한 도구입니다. 스레드가 서로를 기다릴 수 있도록 하고 여러 주기에 걸쳐 재사용할 수 있으므로 많은 동기화 시나리오에 이상적입니다. 데이터를 일괄 처리하든 병렬 알고리즘을 구현하든 상관없이 CyclicBarrier를 효과적으로 사용하는 방법을 이해하면 멀티스레드 프로그래밍 기술이 향상됩니다.
질문이 있거나 프로젝트에서 CyclicBarrier 사용에 대한 추가 설명이 필요한 경우 아래에 자유롭게 의견을 남겨주세요!
에서 더 많은 게시물을 읽어보세요. CyclicBarrier란 무엇인가요? 주요 사실과 예시 설명
위 내용은 CyclicBarrier 란 무엇입니까? 주요 사실과 예시 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!