栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

CountDownLatch

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CountDownLatch

文章目录
  • 前言
  • 一、CountDownLatch概述
  • 二、代码示例
    • 1.共享资源CounDown
    • 2.客户端


前言

日常生活中,通常我们完成一件事之后才会接着干下一件事,而一件事可能被分成多个环节由多个人去同步进行,有的人快,有的人慢。但不管怎样,只有全部人都完成了自己负责的环节才算这件事完成了,下一件事才得以继续。这跟java中的CountDownLatch很像,接下来我们就一起探讨下CountDownLatch


一、CountDownLatch概述

示例:一个或者多个线程需要在其它线程都完成任务之后才能执行,其它线程没有完成任务则需要等待。

二、代码示例 1.共享资源CounDown

提供计数方法(其它线程需要完成任务,则需要调用计数方法)、等待方法(其它线程没有完成任务,则需要调用该方法进行等待)

package countdown;

public class CountDown {
    private final int total;
    private int counter = 0;

    public CountDown(int total) {
        this.total = total;
    }

    public synchronized void count() {
        counter++;
        notifyAll();
    }

    public synchronized void await() throws InterruptedException {
        while (counter != total) {
            this.wait();
        }
    }
}

2.客户端

多个线程进行计数任务,当计数达到某个值之后,才进行下一件事的执行。在计数值没有完成前,执行第二件事的线程需要进行等待

package countdown;

import java.util.Random;
import java.util.stream.IntStream;

public class client {
    private final static Random random = new Random(System.currentTimeMillis());
    public static void main(String[] args) throws InterruptedException {
        System.out.println("任务开始了。。。。。。。。。");
        CountDown countDown = new CountDown(5);
        IntStream.rangeClosed(1, 5).forEach(x -> new Thread(() -> {
            System.out.println("The Thread "+Thread.currentThread().getName() + " is working......");
            try {
                Thread.sleep(random.nextInt(1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDown.count();
        }, String.valueOf(x)).start());
        countDown.await();
        System.out.println("第二阶段任务开始。。。。。。。。");
        System.out.println("do something");
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283968.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号