Java并发编程:CountDownLatch与CyclicBarrier的应用实例

原创 桃扇骨 2024-09-24 18:54 191阅读 0赞

在Java的并发编程中,CountDownLatch和CyclicBarrier是两种常用的同步工具。它们用于协调多个线程或任务的执行顺序。

  1. CountDownLatch:
    当一个线程因等待某个信号而进入await()状态时,CountDownLatch会减少计数。当计数器变为0时,所有被阻塞的线程都将被唤醒。

  2. CyclicBarrier:
    CyclicBarrier用于协调一组线程在达到一定数量后一起执行某个操作。当一个线程调用barriers() throws Exception来等待到达特定的屏障编号时,该线程将被阻塞。

实例:

  1. import java.util.concurrent.*;
  2. public class CountDownLatchExample {
  3. private final CountDownLatch countDownLatch = new CountDownLatch(2);
  4. public void threadAction(int number) {
  5. try {
  6. // 线程执行逻辑后调用await
  7. countDownLatch.await(number);
  8. System.out.println("Thread " + number + " completed the task");
  9. } catch (InterruptedException e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. public static void main(String[] args) {
  14. CountDownLatchExample example = new CountDownLatchExample();
  15. // 创建两个线程
  16. ExecutorService executor = Executors.newFixedThreadPool(2);
  17. Future<Integer> future1 = executor.submit(example::threadAction, 1));
  18. Future<Integer> future2 = executor.submit(example::threadAction, 2));
  19. // 等待所有任务完成
  20. try {
  21. future1.get();
  22. future2.get();
  23. } catch (InterruptedException | ExecutionException e) {
  24. e.printStackTrace();
  25. }
  26. executor.shutdown();
  27. }
  28. }

这个例子中,两个线程分别执行threadAction方法。当某个线程完成任务并调用await(number)时,CountDownLatch会减少计数。当计数器变为0时,所有阻塞的线程都会被唤醒并继续执行任务。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,191人围观)

还没有评论,来说两句吧...

相关阅读