CountDownLatch学习

概述

CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。
用法

new CountDownLatch(n)初始化一个计数为n的CountDownLatch;

countdownlatch.countDown()每当一个任务线程执行完毕,就将计数器减1;

coundownlatch.await()当计数器的值变为0时,就会被唤醒。

实例

package com.business.thread;

import java.util.concurrent.CountDownLatch;

/* 使用CountDownLatch
 * 2个初始化线程、1个业务线程、4个初始化线程,1个主线程。需要等待初始化线程等操作完,主线程和业务线程再工作
 */
public class UseCountDownLatch {
	
	static CountDownLatch latch = new CountDownLatch(6);
	//初始化线程
	private static class initThread implements Runnable{

		@Override
		public void run() {
			System.out.println("Thread "+Thread.currentThread().getName()+
					"init");
			latch.countDown();
			System.out.println("Thread "+Thread.currentThread().getName()+
					"do other");
			
		}
		
	} 
	
	//业务线程
	private static class busiThread implements Runnable{

		@Override
		public void run() {
			try {
				latch.await();//等待其他线程完成工作

			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("Thread "+Thread.currentThread().getName()+
					"do bussiness");
		}
		
	}
	
	public static void main(String[] args) throws InterruptedException {
		//初始化线程完成两个初始化操作
		new Thread(new Runnable(){

			public void run() {
				
				System.out.println("Thread "+Thread.currentThread().getName()+
						"init work step1");
				latch.countDown();

				System.out.println("Thread "+Thread.currentThread().getName()+
						"init work step2");
				latch.countDown();
				
			}
		}).start();
		//创建业务线程
		new Thread(new busiThread()).start();
		//创建4个初始化线程
		for(int i=0;i<=3;i++) {
			Thread thread = new Thread(new initThread());
			thread.start();
		}
		latch.await();//等待初始化完成
		System.out.println("main do its work");
	}
	
	
}

执行结果

Thread Thread-0init work step1
Thread Thread-0init work step2
Thread Thread-2init
Thread Thread-2do other
Thread Thread-3init
Thread Thread-4init
Thread Thread-4do other
Thread Thread-5init
Thread Thread-5do other
Thread Thread-3do other
main do its work
Thread Thread-1do bussiness

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章