Java多线程之CountDownLatch

CountDownLatchDemo.java

本例描述的是over线程等待两个work线程结果后发出over消息

package com.ccy.thread.demo;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

/**
 * 
 * <p> 
 * Title: CountDownLatchDemo.java 
 * Package com.ccy.thread.demo 
 * </p>
 * <p>
 * Description: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 本例描述的是over线程等待两个work线程结果后发出over消息
 * 
 * <p>
 * @author Tom.Cai
 * @created 2015-12-27 下午2:53:07 
 * @version V1.0 
 *
 */
public class CountDownLatchDemo {
	public static void main(String[] args) throws InterruptedException {
		final CountDownLatch doneSignal = new CountDownLatch(2);
		new Thread(new Work(doneSignal)).start();
		new Thread(new Work(doneSignal)).start();
		new Thread(new Over(doneSignal)).start();
	}
	
}



class Work implements Runnable {
	private  CountDownLatch doneSignal;

	Work(CountDownLatch doneSignal) {
		this.doneSignal = doneSignal;
	}

	@Override
	public void run() {
		try {
			TimeUnit.SECONDS.sleep(2);
			System.out.println(Thread.currentThread().getName()+"done...");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			 doneSignal.countDown();
		}
	}

}


class Over implements Runnable {
	private  CountDownLatch doneSignal;

	Over(CountDownLatch doneSignal) {
		this.doneSignal = doneSignal;
	}

	@Override
	public void run() {
		try {
			doneSignal.await();
			System.out.println("over...");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
		}
	}

}

结果:

更多多线程精彩内容请继续关注我的博客http://blog.csdn.net/caicongyang

记录与分享,你我共成长 -from caicongyang
 

猜你喜欢

转载自xianlincai.iteye.com/blog/2367930