CountDownLatch使用

CountDownLatch類的使用,CountDownLatch是一個工具類,運行主線程開啓子線程的時候,子線程還沒有結束的時候,主線程可以一直等待,直到初始化的現成的計數器count爲0,主線程就可以不用等待繼續執行了。

注意:

count只能在實例化CountDownLatch類的時候初始化,沒有其他的辦法count注入值。

countDown方法,當前線程調用此方法,則計數在實例化CountDownLatch中傳入的值基礎上減一。

awaint方法,調用此方法會一直阻塞當前線程,不會向下執行,直到計時器的值爲0的時候程序纔會繼續向下執行。

簡單的使用示例:

import java.util.concurrent.CountDownLatch;

/**
 * CountDownLatch的使用
 * @author tyl
 *
 */
public class Test {

	private static final int count = 5;
	
	public static void main(String[] args) throws InterruptedException {
		CountDownLatch countDownLatch = new CountDownLatch(count);
		for (int i = 0; i < count; ++i) // create and start threads
		{
			new Thread(new Worker(countDownLatch,i)).start();
		}
		
		countDownLatch.await();		//阻塞線程,不繼續往下執行
		doLastSomething();
	}
	

	private static void doLastSomething() {
		System.out.println("等待所有子線程完成之後繼續做我需要做的事情");
	}
	static class Worker implements Runnable {
		private CountDownLatch countDownLatch;
		private int i;
		public Worker( CountDownLatch doneSignal,int i) {
			this.countDownLatch = doneSignal;
			this.i=i;
		}
		public void run() {
			try {
				doWork();
			} catch (Exception e) {
	 
			} finally {
				countDownLatch.countDown();
			}
		}
		
		private void doWork() {
			System.out.println("創建子線程工作,開始工作.....,子線程ID爲:"+i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
}

 

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