CountDownLatch的使用 Java

首先讲一下这个类是干嘛的:

这是java中的同步辅助类。作用:在完成一组正在其他线程中执行的操作之前,它允许线程一直等待。这个类使用一个整数进行初始化,这个整数就是线程等待完成的操作数目。当一个线程要等待某些操作先执行完时,需要调用await()方法,这个方法让线程进入休眠直到等待的所有操作都完成。当某一个操作完成后,他将调用countDown()方法将CountDownLatch类的内部计数器减一。当计数器变成0的时候,CountDownLatch类将唤醒所有调用await方法而进入休眠的线程。

代码小例子:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;

public class CountdownLatchDemo {
	public static void main(String[] args) {
		CountDownLatch latch = new CountDownLatch(2);
		Worker w1 = new Worker("Fishing",2000,latch);
		Worker w2 = new Worker("Astall",1000,latch);
		w1.start();
		w2.start();
		try {
			latch.await();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("All work done!!");
	}
}

class Worker extends Thread {
	String workerName;
	int workTime;
	CountDownLatch latch;
	public Worker(String workerName, int workTime, CountDownLatch latch) {
		this.workerName = workerName;
		this.workTime = workTime;
		this.latch = latch;
	}
	public void run() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("Worker"+workerName+"do work begin at"+sdf.format(new Date()));
		doWork();
		System.out.println("Worker"+workerName+"do work complete at" + sdf.format(new Date()));
		latch.countDown();
	}
	private void doWork() {
		try {
			Thread.sleep(workTime);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值