Java中CountDownLatch使用初步

package gj.lang.util.concurrent.countdonwlatch;

import java.util.Random;
import java.util.concurrent.CountDownLatch;

/**
 * Author: areful
 * Date: 2019/4/24
 */
public class CountDownLatchSample {
    private static class Player implements Runnable {
        private int id;
        private CountDownLatch beginCountDownLatch;
        private CountDownLatch endCountDownLatch;

        private Player(int id, CountDownLatch begin, CountDownLatch end) {
            this.id = id;
            this.beginCountDownLatch = begin;
            this.endCountDownLatch = end;
        }

        @Override
        public void run() {
            try {
                beginCountDownLatch.await();
                System.out.println("CyclicBarrierSample " + id + "起跑...");

                Thread.sleep(new Random().nextInt(1000));
                System.out.println("CyclicBarrierSample " + id + " 到达终点");

                endCountDownLatch.countDown();
                System.out.println("CyclicBarrierSample " + id + "继续干其他事情");
            } catch (InterruptedException ignored) {
            }
        }
    }

    public static void main(String[] args) {
        final int PLAYER_NUM = 5;
        CountDownLatch beginCountDownLatch = new CountDownLatch(1);
        CountDownLatch endCountDownLatch = new CountDownLatch(PLAYER_NUM);

        for (int i = 0; i < PLAYER_NUM; i++) {
            new Thread(new Player(i, beginCountDownLatch, endCountDownLatch)).start();
        }

        try {
            System.out.println("统一起跑");
            beginCountDownLatch.countDown();

            endCountDownLatch.await(); //等待所有运动员到达终点
            System.out.println("结果发送到汇报成绩的系统");
        } catch (InterruptedException ignored) {
        }
    }
}

   

输出结果:

原文地址:https://www.cnblogs.com/areful/p/10763562.html

时间: 2024-10-25 04:29:07

Java中CountDownLatch使用初步的相关文章

java中CountDownLatch线程同步的入门使用

一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 下面使用了两个倒计数锁存器:即一个等待另一个的完成 import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchTest { /** * @param args

【JAVA】java中CountDownLatch的用法,实例讲解

CountDownLatch主要用于多线程环境中,当所有的线程都countDown了,就会释放所有的等待的线程,await在到0之前一直等待. 直接看一段代码: package thread.thread; import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.ThreadPoolExecutor; impor

浅析Java中CountDownLatch用法

/** CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,计数器大于0 时,await()方法会阻塞程序继续执行 CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件.利用这种特性,可以让主线程等待子线程的结束.下面以一个模拟运动员比赛的例子加以说明. */ import java.util.concurrent.CountDownLatch; import jav

Java中集合类容器初步了解

容器(Collection) 数组是一种容器,集合也是一种容器 java编程中, 装其他各种各样的对象(引用类型)的一种东西, 叫容器 (图书馆里所有的书, 要想管理图书馆里所有的书, 就需要先把这些书放到一个东西里面, 目前掌握的知识来说, 只能是数组, 数组的长度是固定的, 这就出现 一个问题, 数组的长度该定义成多长 ? 长度是不固定的, 因为不知道有多少本书, 这个时候需要这样一种机制: 定义一种东西, 长度不固定, 可以随时添加和删除, 这种东西就是Collection, 只要不超出内

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

转自:http://blog.csdn.net/hbzyaxiu520/article/details/6183714 在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决? 如果是一个线程等待一个线程,则可以通过await()和notify()来实现: 如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制. 下面来详细描述下CountDownLatch的应用场景: 例如:百米赛跑:8名运动员同时

Redis学习记录之Java中的初步使用

1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http://download.csdn.net/detail/he90227/8569855</span> Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings.map. list.

Java中方法的定义与使用,以及对数组的初步了解。

方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法.方法,一般都有一个返回值,用来作为事情的处理结果. 方法的定义 其格式为: /*方法的定义如下修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){执行语句………return 返回值;}*/ 示例: //

java中的线程协调与线程间的数据交换

Java中提供多种方式协调线程的工作. CountDownLatch:当多个也就是具体的数量等于CountDownLatch初始化参数的时候.线程达到了预期状态或者完成了预期工作时触发事件,其他线程可以等待这个事件来触发自己的后续工作.等待的线程是多个.达到了预期状态的线程会调用CountDownLatch的countDown方法.等待的线程会调用CountDownLatch的await方法. import java.util.concurrent.CountDownLatch; import

《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&amp;并发容器类&amp;同步工具类,消费者模式

上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Hashtable,此外还包括在JDK1.2中添加的一些功能相似的类,这些同步的封装器类由Collections.synchronizedXxx等工厂方法创建的.这些类实现线程安全的方式是:将他们的状态封装起来,并对每个共有方法都进行同步,使得每次只能有一个线程能访问容器的状态. 关于java中的Vect