`
jiangwenfeng762
  • 浏览: 288205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java的CountDownLatch用法

 
阅读更多

关于java的CountDownLatch。Latch:门闩之意。

CountDownLatch经常用来在多线程环境下,主线程协调多个子线程的步调。生活中最相似的场景就是运动员比赛,裁判员(主线程)控制比赛的开始和结束,运动员(子线程)完成自己的比赛,当且仅当所有运动员都完成比赛时,裁判员就可以下令整场比赛结束。下面转载网友针对上述场景的模拟代码,以便更好地理解CountDownLatch的使用。

import java.util.concurrent.CountDownLatch;
2  import java.util.concurrent.Executor;
3  import java.util.concurrent.ExecutorService;
4  import java.util.concurrent.Executors;
5 
6  publicclass CountDownLatchDemo {
7 privatestaticfinalint PLAYER_AMOUNT =5;
8 public CountDownLatchDemo() {
10   }
11 /**
12 @param args
13 */
14 publicstaticvoid main(String[] args) {
16 //对于每位运动员,CountDownLatch减1后即结束比赛
17 CountDownLatch begin =new CountDownLatch(1);
18 //对于整个比赛,所有运动员结束后才算结束
19 CountDownLatch end =new CountDownLatch(PLAYER_AMOUNT);
20 Player[] plays =new Player[PLAYER_AMOUNT];
21 
22 for(int i=0;i<PLAYER_AMOUNT;i++)
23 plays[i] =new Player(i+1,begin,end);
24 
25 //设置特定的线程池,大小为5
26 ExecutorService exe = Executors.newFixedThreadPool(PLAYER_AMOUNT);
27 for(Player p:plays)
28 exe.execute(p); //分配线程
29 System.out.println("Race begins!");
30 begin.countDown();//相当于裁判员下令比赛开始
31 try{
32 end.wait(); //等待end状态变为0,即为比赛结束
33 }catch (InterruptedException e) {
35 e.printStackTrace();
36 }finally{
37 System.out.println("Race ends!");
38 }
39 exe.shutdown();
40 }
41 }

接下来是Player类

1 import java.util.concurrent.CountDownLatch;
2 
3 
4 publicclass Player implements Runnable {
5 
6 privateint id;
7 private CountDownLatch begin;
8 private CountDownLatch end;
9 public Player(int i, CountDownLatch begin, CountDownLatch end) {
11 super();
12 this.id = i;
13 this.begin = begin;
14 this.end = end;
15 }
16 
17 @Override
18 publicvoid run() {
20 try{
21 begin.await(); //等待begin的状态为0,相当于运动员已做好准备,等待裁判员宣布比赛开始。
22 Thread.sleep((long)(Math.random()*100)); //随机分配时间,即运动员完成时间
23 System.out.println("Play"+id+" arrived.");
24 }catch (InterruptedException e) {
26 e.printStackTrace();
27 }finally{
28 end.countDown(); //使end状态减1,最终减至0
29 }
30 }
31 }

 

分享到:
评论

相关推荐

    Java中CountDownLatch用法解析

    在Java并发编程中,`CountDownLatch`是一个非常重要的工具类,它位于`java.util.concurrent`包下,用于协调多个线程间的同步。...理解和熟练使用`CountDownLatch`对于编写高效的多线程Java程序至关重要。

    Java并发包之CountDownLatch用法.docx

    `CountDownLatch`是Java并发包`java.util.concurrent`中的一个重要工具类,用于实现线程间的同步。它基于计数器的概念,初始化时设置一个非负的计数值,然后通过调用`countDown()`方法来递减这个计数器。主线程或...

    CountDownLatch学习用法

    5. **一次性使用**:CountDownLatch的设计是一次性的,即一旦计数器归零,就不能再次使用。如果尝试再次调用`await()`或`countDown()`,它将抛出`IllegalStateException`。 6. **并发性能**:由于CountDownLatch是...

    JAVA CountDownLatch(倒计时计数器)用法实例

    本文将详细介绍 CountDownLatch 的用法实例,通过示例代码来讲解其使用方法。 CountDownLatch 的主要方法 CountDownLatch 有两个主要方法:countDown() 和 await()。 1. countDown() 方法: public void ...

    多线程countDownLatch方法介绍

    在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始...

    java使用CountDownLatch等待多线程全部执行完成

    Java 使用 CountDownLatch 等待多线程全部执行完成 CountDownLatch 是 Java 中的一个同步工具类,允许一个或多个线程等待其他线程完成操作。它的应用场景非常广泛,例如在处理大量数据时,可以使用多线程的方式处理...

    Java concurrency之CountDownLatch原理和示例_动力节点Java学院整理

    下面我们将深入探讨CountDownLatch的原理、使用方法以及与CyclicBarrier的区别。 首先,CountDownLatch的构造函数接受一个整数参数`count`,这个值表示计数器的初始值。当这个计数器归零时,所有等待在`await()`...

    CountDownLatch和CyclicBarrier用法实例大全

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具类,它们用于协调多个线程间的协作。这两个工具都是在`java.util.concurrent`包下,是Java并发库的重要组成部分。 **CountDownLatch** ...

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴.pdf

    java并发编程中CountDownLatch和CyclicBarrier的使用借鉴 java并发编程中CountDownLatch和CyclicBarrier是两个非常重要的线程控制和调度工具,经常被用于解决多线程程序设计中的线程等待问题。本文将对...

    Java CountDownLatch完成异步回调实例详解

    Java CountDownLatch 完成异步回调实例详解 Java 中的 CountDownLatch 是一个同步辅助类,允许一个线程等待其他线程完成操作。它是一种非常有用的工具,用于在多线程环境中实现异步回调。在本文中,我们将学习如何...

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    在批量插入数据的场景下,可以创建一个CountDownLatch对象,初始化为线程的数量,每个线程处理完自己的数据后调用`countDown()`方法,主线程通过调用`await()`方法等待所有线程完成后再执行后续操作,如提交事务。...

    JAVA多线程CountDownLatch使用详解

    JAVA多线程CountDownLatch使用详解 JAVA多线程CountDownLatch是JAVA多线程编程中的一种同步工具,主要用来让某个线程等待其他线程执行完毕后再继续执行。下面我们将详细介绍JAVA多线程CountDownLatch的使用和原理。...

    JAVA CountDownLatch与thread-join()的区别解析

    thread-join()方法和CountDownLatch都是Java中的线程同步机制,但它们的原理和使用场景不同。thread-join()方法主要用来控制线程的执行顺序,而CountDownLatch则提供了一种更加灵活的线程同步机制。

    java利用CountDownLatch实现并行计算

    calcSum() 方法创建了多个线程,每个线程执行 calc() 方法,并使用 CountDownLatch.await() 方法来等待所有线程执行完成。最后,我们使用 sum() 方法来汇总结果。 四、结论 Java 中的 CountDownLatch 是一个非常...

    详解java CountDownLatch和CyclicBarrier在内部实现和场景上的区别

    在Java并发编程中,CountDownLatch和CyclicBarrier都是用于协调多线程间同步的重要工具,它们可以帮助开发者在特定条件满足时启动或者结束线程的执行。本文将详细探讨这两个类的内部实现机制以及它们在实际应用场景...

    Java中的CountDownLatch类最全讲义

    CountDownLatch的基本用法 2.1 创建CountDownLatch对象 2.2 await()方法 2.3 countDown()方法 实现多线程任务的同步 3.1 场景介绍 3.2 使用CountDownLatch实现同步 主线程等待多个线程完成 4.1 场景介绍 4.2 使用...

    利用 CountDownLatch 类实现线程同步

    1. **初始化异步操作**:在 Activity 或 Fragment 的生命周期方法中,如果需要先执行一系列异步操作(如网络请求、数据库初始化等)再显示界面,可以使用 `CountDownLatch` 来等待这些异步操作完成。 2. **并发测试...

    Java中CountDownLatch进行多线程同步详解及实例代码

    Java中CountDownLatch进行多线程同步详解及实例代码 CountDownLatch是Java中的一种多线程同步辅助类,主要用来同步多个任务的执行。它允许一个或多个线程等待,直到一组正在其他线程中执行的操作完成。下面是对...

    java并发编程中CountDownLatch和CyclicBarrier的使用.pdf

    在Java并发编程中,CountDownLatch和CyclicBarrier是两种非常重要的同步工具,用于协调多个线程之间的交互。它们都属于java.util.concurrent包下的类,为多线程编程提供了强大的支持。 **CountDownLatch** 是一个...

    CountDownLatch练习

    2. **如何避免死锁与饥饿**:在使用CountDownLatch时,要确保所有线程都能正确调用`countDown()`,避免因某个线程异常而无法达到零导致死锁。 3. **如何选择合适的同步工具**:根据场景选择,如果需要所有线程执行完...

Global site tag (gtag.js) - Google Analytics