深入理解Java并发工具:CountDownLatch和CyclicBarrier实战案例

原创 逃离我推掉我的手 2024-09-18 11:30 140阅读 0赞

在Java的多线程编程中,CountDownLatch和CyclicBarrier是两个非常重要的并发工具。它们主要用于控制多个线程的执行顺序。

  1. CountDownLatch

CountDownLatch是一种倒计时类型的对象,它的初始值至少为0。当一个线程等待某个事件发生(例如资源准备完毕)时,会将CountDownLatch的值减1。当所有需要等待的线程都完成了上述操作后,调用await()方法的线程才会继续执行。

实战案例:

  1. import java.util.concurrent.CountDownLatch;
  2. public class CountDownLatchExample {
  3. private static final int NUM_THREADS = 5;
  4. private static final int MAX_COUNT = NUM_THREADS * 2;
  5. public static void main(String[] args) throws InterruptedException {
  6. // 创建CountDownLatch对象,初始值为0
  7. CountDownLatch countDownLatch = new CountDownLatch(NUM_THREADS);
  8. // 创建并启动多个线程
  9. for (int i = 1; i <= NUM_THREADS; i++) {
  10. Thread workerThread = new Thread(() -> {
  11. try {
  12. // 线程执行的任务,模拟等待资源准备完成
  13. countDownLatch.await(MAX_COUNT);
  14. } catch (InterruptedException e) {
  15. System.out.println("Thread " + i + " interrupted: " + e.getMessage());
  16. }
  17. }));
  18. workerThread.start();
  19. }
  20. // 当CountDownLatch的值减到0时,执行以下操作
  21. if (countDownLatch.getCount() == 0) {
  22. System.out.println("All threads finished waiting.");
  23. countDownLatch.countDown(); // 向所有等待线程发出计数为1的通知
  24. }
  25. }
  26. }

在上述案例中,我们创建了一个CountDownLatch对象,模拟5个线程等待资源准备完成。当所有线程都完成了等待后,会执行一些特定操作。

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

发表评论

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

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

相关阅读