Java CountDownLatch 使用与案例测试

一、CountDownLatch介绍;

* CountDownLatch是一种java.util.concurrent包下一个同步工具类;

* CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
* public void countDown() 锁存器的计数减1;
* public boolean await(long timeout,TimeUnit unit) 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。

二、应用场景介绍;

应用场景1:某一线程在开始运行前等待n个线程执行完毕;比如启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行。

应用场景2:实现多个线程开始执行任务的最大并行性。注意是并行性,不是并发,强调的是多个线程在某一时刻同时开始执行。类似于赛跑,将多个线程放到起点,等待发令枪响,然后同时开跑。做法是初始化一个共享的CountDownLatch(1),将其计算器初始化为1,多个线程在开始执行任务前首先countdownlatch.await(),当主线程调用countDown()时,
计数器变为0,多个线程同时被唤醒。

三、样例代码;

 1 public class CountDownLatchTest {
 2
 3     public static void main(String[] args) throws Exception{
 4         // TODO Auto-generated method stub
 5         //场景1测试代码块开始
 6         CountDownLatch latch = new CountDownLatch(2);
 7
 8         for(int i=0;i<2;i++){
 9             Thread thread = new Thread(new ComponentService(latch));
10             thread.start();
11         }
12
13         System.out.println("main thread begin...");
14         latch.await(); //使当前线程在锁存器倒计数至零之前一直等待
15         System.out.println("main thread end....");
16         //场景1测试代码块结束
17         System.out.println("===============长长的分割线================");
18         //场景2测试代码块开始
19         CountDownLatch begin = new CountDownLatch(1);
20         for(int i=0;i<2;i++){
21             Thread thread = new Thread(new Player(begin));
22             thread.start();
23         }
24         System.out.println("main thread begin...");
25         begin.countDown();
26         System.out.println("main thread end....");
27         //场景2测试代码块结束
28     }
29 }
 1 class ComponentService implements Runnable{
 2     private CountDownLatch latch;
 3     public ComponentService(CountDownLatch latch) {
 4         super();
 5         this.latch = latch;
 6     }
 7
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11             System.out.println(Thread.currentThread().getName()+" 服务启动成功 !");
12             latch.countDown();
13     }
14 }
 1 class Player implements Runnable{
 2     private CountDownLatch begin;
 3     public Player(CountDownLatch begin) {
 4         super();
 5         this.begin = begin;
 6     }
 7
 8     @Override
 9     public void run(){
10         // TODO Auto-generated method stub
11         try {
12             begin.await();
13             System.out.println(Thread.currentThread().getName()+" 起跑成功!");
14         } catch (InterruptedException e) {
15             // TODO Auto-generated catch block
16             e.printStackTrace();
17         }
18     }
19 }

执行结果:

四、部分内容转载说明;

部分来自网络整理:

https://www.cnblogs.com/Lee_xy_z/p/10470181.html

原文地址:https://www.cnblogs.com/crazytrip/p/11697595.html

时间: 2024-10-25 10:15:59

Java CountDownLatch 使用与案例测试的相关文章

JAVA 大数据内存耗用测试

JAVA 大数据内存耗用测试import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean; public class MemoryTest { public static void main(String[] args) throws InterruptedException { int row = 50_000; int column = 20; String[] data = ne

java中一个memcached案例

下面先来一个网络上的案例,这个案例比较简单,直接在类中进行一些参数的配置,具体代码如下: package com.wzpmt; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; public class MemCachedManager

JAVA Excel API学习案例

先贴代码吧,运行一下,看看效果,然后看看注释,再看看代码后面的基础介绍 创建一个新excel并写入数据: public static void myExcel2() throws IOException, WriteException { WritableWorkbook wwb = Workbook.createWorkbook(new File("F:" + File.separator + "myExcel1.xls")); // 创建excel表格中的一个s

Java环境下shiro的测试-认证与授权

Java环境下shiro的测试 1.导入依赖的核心jar包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> 2.认证程序 2.1 构建users配置文件 xxx.ini doGetAuthenticationInf

Java元注解,简单案例

[注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressWarnings :压制警告. @Deprecated :标记过时. 自定义注解: 定义一个类:class 定义一个借口:interface 定义一个枚举:enum 定义一个注解:@interface 用法: @interface MyAnno1{ } 带有属性的注解: @interface MyAn

beetle.express一通讯案例测试结果

应案例相对比较简单,要求服务支持3W连接在线,并每秒向这3W个连接进行一些数据广播,同时在3W连接处理的情况下保证每秒还能处理1K个连中接接入.以下是测试结果情况

.嵌入式jetty启动spring(java配置方式),junit测试用.标准spring 配置(java config) 嵌入式jetty9启动

package com.doctor.embeddedjetty; import java.util.concurrent.TimeUnit; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.springframework.web.con

java中jdk安装与测试

1.安装路径不要带中文路径和空格 2.当提示安装jre的时候,可以取消,如果要安装不要和原来的jdk安装在一起: 测试: 1.打开cmd窗口: win+r cmd 2.切换盘符: 盘符: 3.进入到指定的目录 cd 路径 4.java 出现下图 5.javac  出现如下图  则安装成功

Java CountDownLatch解析(上)

写在前面的话 最近一直在边工作边学习分布式的东西,看到了构建Java中间件的基础知识,里面有提到Java多线程并发的工具类,例如ReentrantLock.CyclicBarrier.CountDownLatch... 以前在工作中也有用到过这些实用的工具类,但是了解不是特别深入,借此机会打个卡,好记性不如烂博客,哈哈哈... CountDownLatch简介 CountDownLatch顾名思义,count + down + latch = 计数 + 减 + 门闩(这么拆分也是便于记忆=_=)