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

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