CountDownLatch的使用 Java

来源:互联网 发布:搜狗 mac怎么用 编辑:程序博客网 时间:2024/06/05 17:12

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

这是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 blocke.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();}}}


阅读全文
0 0
原创粉丝点击