首页 > 其他分享 >【转】CountDownLatch的使用

【转】CountDownLatch的使用

时间:2023-09-01 14:34:10浏览次数:39  
标签:startSignal CountDownLatch System doneSignal 使用 println out

CountDownLatch

使用原理

  1. 创建CountDownLatch并设置计数器值。

  2. 启动多线程并且调用CountDownLatch实例的countDown()方法。

  3. 主线程调用 await() 方法,这样主线程的操作就会在这个方法上阻塞,直到其他线程完成各自的任务,count值为0,停止阻塞,主线程继续执行。

使用模板

public class CountDownLatchTest {

    /**
     * a start signal that prevents any worker from proceeding
     * until the driver is ready for them to proceed;
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch startSignal = new CountDownLatch(1);
        CountDownLatch doneSignal = new CountDownLatch(10);
        for (int i = 0; i < 10; i++) {
            // create and start threads
            new Thread(new Worker(startSignal, doneSignal)).start();
        }
        // don't let run yet
        System.out.println("do something else 1");
        // let all threads proceed
        startSignal.countDown();
        System.out.println("do something else 2");
        // wait for all to finish
        doneSignal.await();
        System.out.println("wait for all to finsh");
    }

    static class Worker implements Runnable{

        private final CountDownLatch startSignal;
        private final CountDownLatch doneSignal;

        Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
            this.startSignal = startSignal;
            this.doneSignal = doneSignal;
        }

        @Override
        public void run() {
            try {
                startSignal.await();
                doWork();
                doneSignal.countDown();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

        void doWork() {
            System.out.println("do work!");
        }
    }

}

引用地址: Java—CountDownLatch使用详解

标签:startSignal,CountDownLatch,System,doneSignal,使用,println,out
From: https://www.cnblogs.com/lixiuming521125/p/17671775.html

相关文章

  • 关于 rk3568 yocto USB 鼠标不能使用的问题
    问题:发现rk3568yocto镜像出现 USB无法识别鼠标键盘的问题。 经测试发现: 1  1.2底板的yocto镜像,lvds屏幕的镜像是可以的,鼠标与触摸同时可用。   2 测试1.7底板的 yocto lvds影响是不是同样可用。 这说明只要是lvds就是可以用的。  3......
  • WPF使用Blazor的快速案例
    下面我们将讲解在WPF中使用Blazor,并且使用Blazor做一些文件编辑操作,下面是需要用到的东西WPFBlazorMasaBlazorMonaco安装MasaBlazor模板使用CMD指令安装模板dotnetnewinstallMASA.Template新建MasaBlazorWPFApp找到如图的模板,然后点击下一步下一步,新建......
  • MySQL InnoDB 是怎么使用 B+ 树存数据的?
    这里限定MySQLInnoDB存储引擎来进行阐述,避免不必要的阅读歧义。首先通过一篇文章简要了解下B树的相关知识:你好,我是B树。B+树是在B树基础上的变种,主要区别包括:1、所有数据都存储在叶节点,其它几点作为索引存储。2、数据节点添加链指针,便于横向检索。数据是怎么......
  • 如何使用javascript制作一个网页端3D贪吃蛇游戏(附源码)
    3D网页版贪吃蛇游戏!下面来具体讲一下如何实现。该游戏使用Hightopo的SDK制作,总共100多行代码,没有WebGL基础的同学们也可很快掌握。场景初始化首先,我们对页面进行初始化,包括初始化3D场景,设置地面网格,以及开启事件监听等。主要代码及注释如下:w=40;//网格间距m=20;//......
  • 使用windows也能上架你的ipa到苹果
    比xcode更快捷方便的平台-appuploader,易上架是一个非常快捷的应用上传工具,我们的平台http://www.appuploader.net/易上架applicationloader苹果官方提供的工具xcode上架ipa非常复杂麻烦。因此,经过易上架团队将这一过程简化,推出云上架。用户只需要通过web浏览器便可方便上传你的i......
  • 使用Application 上传iOS App
    我们知道发布一个app,一般是用到苹果的applicationloader助手上传应用,用过的都知道使用起来很繁琐,经常出错。而且只能运行在mac系统上,需要一定的硬件条件。而上架辅助工具+ApplicationUploader,可以实现在windows,linux或mac上,不需要应用程序加载器和mac计算机,就可以发布app到appst......
  • 使用 Phoenix LiveView 构建 Instagram (3)
    使用PETAL(Phoenix、Elixir、TailwindCSS、AlpineJS、LiveView)技术栈构建一个简化版的InstagramWeb应用程序在第2部分中,我们添加了编辑帐户和上传用户头像的功能,在这部分中,我们将处理用户的个人资料。您可以赶上Instagram克隆GitHubRepo。首先,我们需要路由,lib/instagra......
  • 使用 Phoenix LiveView 构建 Instagram (1)
    使用PETAL(Phoenix、Elixir、TailwindCSS、AlpineJS、LiveView)技术栈构建一个简化版的InstagramWeb应用程序更好的学习方法是亲自动手构建东西,让我们使用很棒的PETAL(Phoenix、Elixir、TailwindCSS、AlpineJS、LiveView)堆栈构建一个简化版的InstagramWeb应用程序,并深入了......
  • HTML5新特性 拖拽使用心得
    本文主要介绍了拖拽和拖放的几个属性先构建一个框架<div id="wrap">        <img id="drag" src="" draggable="true">    <div id="drop" >        <span>目标区域</span>    </div></div>draggable......
  • 使用SheetJs实现在线预览Excel(保留单元格格式信息)
    一、寻找合适的在线预览Excel的js库经过百度各种搜索,加上ChatGpt推荐,决定用SheetJs实现在线预览Excel。下面是SheetJs的官网介绍:SheetJS电子表格简化读取、编辑和导出电子表格适用于网络浏览器和服务器Office365受到Microsoft信任 SheetJS软件为业务提供动力谷歌、......