Java并发编程:CountDownLatch与CyclicBarrier使用实例
CountDownLatch和CyclicBarrier是Java中两种常用的线程同步工具,主要用于控制多个线程的执行顺序。
- CountDownLatch
CountDownLatch最初设计用于一个或多个线程等待其他线程完成特定操作后释放计数器。当计数器值为0时,所有等待的线程都会被唤醒。
使用实例:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
private final CountDownLatch countDownLatch = new CountDownLatch(1);
public void startTask() throws InterruptedException {
System.out.println("Starting Task...");
// 执行任务,这里模拟耗时操作
Thread.sleep(2000);
System.out.println("Task Completed.");
// 当计数器值为0时,唤醒所有等待的线程
countDownLatch.countDown();
}
public static void main(String[] args) {
CountDownLatchExample example = new CountDownLatchExample();
example.startTask(); // 启动任务
}
}
- CyclicBarrier
CyclicBarrier主要用于一组线程在完成一个操作后相互等待。每个线程调用屏障方法都会使当前线程到达屏障,然后所有到达屏障的线程都会一起等待某个条件满足后再继续执行。
使用实例:
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierExample {
private final CyclicBarrier barrier = new CyclicBarrier(2, "Signal!"));
public void startTask() throws InterruptedException {
System.out.println("Starting Task...");
// 执行任务,这里模拟耗时操作
Thread.sleep(2000);
System.out.println("Task Completed.");
// 当线程到达屏障时,会调用所有已经到达的线程的run方法
barrier.await();
System.out.println("Signal received. Continuing...");
}
public static void main(String[] args) {
CyclicBarrierExample example = new CyclicBarrierExample();
example.startTask(); // 启动任务
}
}
总结,CountDownLatch用于线程间控制,而CyclicBarrier则更适用于一组线程需要在一个特定点会合的场景。
还没有评论,来说两句吧...