CountDownLatch应用实战

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1. CountDownLatch简介

       一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。其本质就是一个共享锁。

       他最主要的作用是用来同步java的线程。

主要有以下三个方法:

主要方法:

 public CountDownLatch(int count);public void countDown();public void await();

构造方法参数指定了计数的次数

countDown方法,当前线程调用此方法,则计数减一

await方法,调用此方法会一直阻塞当前线程,直到计时器的值为0

2. 实战应用的例子

         一个模拟运动员比赛的例子,首先要等所有的运动员全部给准备好,然后发起“起跑指令”所有的运动员开始起跑,等所有的运动员跑完才结束本次笔试。

代码如下:

运动员线程代码:

package it_cast.day01;
import java.util.concurrent.CountDownLatch;
public class Player implements Runnable {private int id;private CountDownLatch begin;private CountDownLatch end;public Player(int id, CountDownLatch begin, CountDownLatch end) {this.id=id;this.begin=begin;this.end=end;}@Overridepublic void run() {// TODO Auto-generated method stubtry {System.out.println("Play" + id + "ready");begin.await();// 所有的运动员在这准备者,当一声令下就开始跑Thread.sleep((long) (Math.random() * 100));// 随机分配时间,即运动员完成时间System.out.println("Play" + id + " arrived.");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {end.countDown();// 每个运动员跑完,使end状态减1,最终减至0}        }
}

主代码:

package it_cast.day01;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchDemo {private static final int PLAYER_AMOUNT = 5;public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub//对于每位运动员,CountDownLatch减1后即结束比赛CountDownLatch begin = new CountDownLatch(1);//对于整个比赛,所有运动员结束后才算结束CountDownLatch end = new CountDownLatch(PLAYER_AMOUNT);Player [] plays=new Player[PLAYER_AMOUNT];//初始化5个运动员for (int i = 0; i < plays.length; i++) {plays[i]=new Player(i, begin, end);}//设置特定的线程池,大小为5ExecutorService exe = Executors.newFixedThreadPool(PLAYER_AMOUNT);for(Player p:plays)exe.execute(p); Thread.sleep(1000);System.out.println("Race begins!");begin.countDown();end.await();; //等待end状态变为0,即为所有人都跑完了,即为比赛结束System.out.println("Race ends!");exe.shutdown();     }
}

运行结果如下:

161411_obf0_1540325.png

 

转载于:https://my.oschina.net/u/1540325/blog/603298

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用JoyToKey使游戏手柄变键盘或鼠标

用JoyToKey使游戏手柄变键盘或鼠标 除了用手柄来玩游戏外&#xff0c;你有没有想过利用手柄做点别的什么事情呢&#xff1f;其实&#xff0c;只要结合一个非常小巧的游戏控制器增强软件JoyToKey&#xff0c;我们就能最大限度地挖掘手柄的潜力&#xff0c;用它来完成在以前看来“…

40张令人震惊的对比图,第一张细思恐极

全世界只有3.14 % 的人关注了爆炸吧知识世界之大&#xff0c;无奇不有。来看Reddit网友们分享的一组对比图&#xff0c;涨涨姿势&#xff01;医生对戴口罩和不戴口罩的培养皿分别&#xff1a;打喷嚏&#xff0c;唱歌&#xff0c;说话和咳嗽之后的区别&#xff08;难怪有些国家疫…

mysql查找最高分最低分_sql查询最高分、最低分和平均分语句

sql 查询最高分、最低分和平均分语句//我们要用就以学生成绩为实例吧/*结构学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号*/查询各科成绩最高分、最…

Smark.Data 1.5更新详解

由于一直忙于Beetle的开发和优化&#xff0c;Smark.Data组件已经有很长一段时间更新。这段时间发现Smark.Data在某些情况下不足&#xff0c;而这些情况又比较普遍所以进行了1.5版的更新。其更新的主要功能包括:查询可填充到自定义对象中&#xff0c;可直接执行存储过程和执行存…

Sql 存储过程加游标结合的使用

创建一个存储过程使用游标 如果该职工入职时间超过3年 并且学历 在本科以上 则对该职工工资加10%如果 学历没达到本科的 入职时间在10年以上 同样对该职工工资追加8% 其他的一律不加 CREATE proc jiagongzi as declare name nvarchar(20) declare xueli nvarchar(20) declare…

C# 数据适配器之 DataAdapter 对象

01 DataAdapter 对象概述DataAdapter 对象是一个数据适配器对象&#xff0c;是DataSet 与数据源之间的桥梁。DataAdapter 对像提供了 4 个属性&#xff0c;用于实现与数据源之间的互通。SelectCommand 属性&#xff1a;向数据库发送查询 SQL 语句。 DeleteCommand 属性&#x…

express 4 简单实现自动注册路由功能

为什么80%的码农都做不了架构师&#xff1f;>>> ##实现 在express&#xff0c;模块的lib/router/index.js 的 proto.route 方法定义附件添加代码&#xff0c;实现自动注册路由方法&#xff1a; var fs require("fs"); var Path require("path&quo…

速战速决?你不会是不行吧......

1 真服了&#xff01;&#xff01;▼2 同猫不同命......▼3 无锡&#xff1a;&#xff1f;&#xff1f;▼4 还是黄金好&#xff1f;▼5 你会不会是不行&#xff1f;&#xff1f;▼6 爸爸&#xff1a;那也太惊喜了...▼7 倒是毫无违和感&#xff1f;▼8 皇上您说的对&…

mysql普通标转分区表_MySQL分区表到普通表互转

由于最近总有人抱怨&#xff0c;数据迁移后执行SQL变慢&#xff0c;经过查看原来是分区导致的问题。原分区根据按月设置RANGE分区&#xff0c;看到这图的时候也许有人就会发现问题.......业务查询SQL&#xff1a;从SQL上看 执行计划确实是走了分区&#xff0c;但为什么没有命中…

c++标准库中,含有链表的类list

Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除&#xff0c;但是随机访问却比较慢.STL中 end()指向的总是无效值&#xff0c;取值都用迭代器&#xff0c;用法跟指针差不多。assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个…

读懂路由表

教你读懂路由表源码:--------------------------------------------------------------------------------Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.16…

C# 用IrisSkin4.dll美化你的WinForm

1. 将IrisSkin4.dll动态文件导入当前项目引用中。具体操作为&#xff1a;解决方案资源管理器->当前项目->引用->右键->添加引用&#xff0c;找到IrisSkin4.dll文件&#xff0c;然后加入即可。建议&#xff0c;最好把IrisSkin4.dll文件放在当前项目\bin\Debug文件中…

SpringMVC中的文件上传

这是用的是SpringMVC-3.1.1、commons-fileupload-1.2.2和io-2.0.1 web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app version"2.5" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:xsi"http://www.w3.o…

JavaScript对象、JSON对象、JSON字符串的区别

一、首先看下什么是JSON JSON&#xff1a;JavaScript Object Natation&#xff0c;JavaScript对象的表现形式&#xff0c;已经发展成一种轻量级的数据交换格式。 JavaScript对象的表现形式&#xff0c;指定义JS对象的一种方式。数据交换格式&#xff0c;即用于交换的数据格式。…

全球最大油田、金矿、煤矿、铁矿、铜矿,究竟哪个最值钱?

全世界只有3.14 % 的人关注了爆炸吧知识1世界上最大油田&#xff1a;沙特加瓦尔油田&#xff08;Ghawar Oil field&#xff09;加瓦尔油田位于沙特阿拉伯东部&#xff0c;首都利雅得以东约500km处&#xff0c;它探明的石油可采储量为114.8亿吨&#xff0c;天然气储量9240亿立方…

JavaScript自动设置IFrame高度(兼容各主流浏览器)

调用方式如下 <iframe id"ifm" name"ifm" οnlοad"SetIFrameHeight(ifm)" src"http://www.qq.com" /> function SetIFrameHeight(down) {var Sys {};var ua navigator.userAgent.toLowerCase();var s;(s ua.match(/msie ([\…

MVC3快速搭建Web应用(二)

easyui与mvc的结合 上一篇文章发布后&#xff0c;自己又仔细读了数遍&#xff0c;感觉一是文笔太差&#xff0c;二是描述逻辑比较混乱&#xff0c;客观原因是涉及到东西其实蛮多的&#xff0c;那三个步骤不可能在一篇短短的文章中就可以描述清楚。此篇笔者将尽量更加详尽一些。…

如何通过 .NETCore 获取 Linux,Mac 的硬件信息?

咨询区 Pascal Jackson&#xff1a;请问我如何通过 .NET Core 去识别 Linux/Mac 电脑上的硬件信息&#xff1f;在 windows 上我可以通过 System.Management 下 WMI Query 很容易获取&#xff0c;比如下面的代码&#xff1a;ManagementObjectSearcher searcher new ManagementO…

KVM 虚拟机自动克隆脚本

#!/bin/sh#----------------------------------## virt-clone auto script[虚拟机自动克隆脚本]# create by xuekun# date 2015-12-26# 开源人#----------------------------------## Source function library.. /etc/rc.d/init.d/functions#SOUR_SERVER$1DIRE_SERVER$2IP_ADDR…

SpringMVC整合Shiro

这里用的是SpringMVC-3.2.4和Shiro-1.2.2&#xff0c;示例代码如下 首先是web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app version"2.5"xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi"http://www.w3.o…