Java-CountDownLatch的小例子

内容:CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch的构造函数接收一个int类型的参数作为计数器,如果你想等待N个线程或者说等待N个执行步骤,那么可以将N作为参数传入。当我们调用一次CountDownLatch的countDown方法时,N就会减1,CountDownLatch的await会阻塞当前线程直到N为0。用于多个线程时,你只需要将这个CountDownLatch的引用传递到线程里。

public class CountDownLatchTest {

	static class Worker implements Runnable {
		private final CountDownLatch doneSignal;
		private final int i;

		public Worker(CountDownLatch doneSignal, int i) {
			this.doneSignal = doneSignal;
			this.i = i;
		}

		@Override
		public void run() {
			System.out.println("now is " + i);
			doneSignal.countDown();
		}

	}

	public static void main(String[] args) throws InterruptedException {
		int N = 10;
		CountDownLatch countDownLatch = new CountDownLatch(N);
		ExecutorService executor = Executors.newFixedThreadPool(N);
		for (int i = 0; i < N; i++)
			executor.execute(new Worker(countDownLatch, i));

		countDownLatch.await();
		System.out.println("over");
	}
}
时间: 2024-10-14 09:40:08

Java-CountDownLatch的小例子的相关文章

java即时通信小例子

学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是在服务上开启一个线程循环等待客户端的连接,为每一个连接到服务器的Socket 创建一个实例存放在集合中,然后使用InputSteam读取从客户端发过来的数据然后转发给除自己之外的所有的客户端 然后是客户端,首先开启一个线程连接都服务器端,循环监听服务器发送回来的数据 这里要说一下为了明确是谁发出的消

Java处理文件小例子--获取全国所有城市的坐标

需求:前端展示数据,全国城市的坐标 这个是 echarts 的 制作地图JSON 工具, 但是没有全国的,只有各个省 前端需要的数据:    所以现在 下载所有的省数据: 然后是Java处理. 这是这里重点, 在开发中, 很多繁琐的事 ,我们都可以用程序来控制: package cn.ycmedia.common.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; i

Java线程池ExecutorService和CountDownLatch的小例子

import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下.当所有人都到达终点时,比赛结束. * @author liuchao * */ public class Actor { public static void main(

Java代理的小例子

利用代理可以在运行时创建一个实现了一组给定接口的新类. 需要一个调用处理器(invocation handler),调用处理器需实现InvocationHandler接口.无论何时调用代理对象的方法,调用处理器的invoke方法都会被调用,并向其传递Method对象和原始的调用参数. 创建代理对象,需要使用Proxy类的newProxyInstance方法.此方法有三个参数: 1.一个类加载器(class loader),null代表默认 2.接口数组 3.一个调用处理器 使用代理的作用: 1.

java中tcp小例子

服务端: ServerSocket service = new ServerSocket(7777); Socket socket = service.accept(); InputStream input = socket.getInputStream(); OutputStream out = socket.getOutputStream(); BufferedInputStream bufinput = new BufferedInputStream(input); BufferedOut

Java加密程序小例子

1:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的. 加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换. package cn.zzsxt.lianxi;import java.util.Scanner;public class Practice { public static void main(String[] args) { System.out.println("请输入一个四位数字:"); Sca

Java并发编程小总结:CountDownLatch、CyclicBarrier和Semaphore

Java并发编程小总结:CountDownLatch.CyclicBarrier和Semaphore这几个类都是在JUC下,也就是java.util.concurrent包下.这两天学习了一下并发编程中的三个类的使用和一些应用场景,所以做一下记录和总结,方便自己日后再查看复现. 1.CountDownLatch.这个类的核心思想总结为8个字“秦灭6国,一统华夏”.它可以实现的是一个类似计数器的功能,与CyclicBarrier的思想正好相反.是一个减法操作.CountDownLatch有且只有一

java操作xml的一个小例子

最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要定义好bean的层次结构就可以了,第三方包会自动生成和解析xml. 但是今天发现,这个包有两个问题: 一个是比较复杂(我是菜鸟,求别喷,我真的觉得他挺复杂的..).比如说你要想处理既有属性又有值的xml就比较麻烦.(@XStreamConverter注解这种方法报这个错:com.thoughtwor

java连接mysql的一个小例子

想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一个小例子数据库如下如 代码 package query; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; impor

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See