並行中的順序執行——CountDownLatch

    java.util.concurrent.CountDownLatch : 一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。--《JDK API 1.6.0》

    換句話說,你可以並行的執行一段代碼,並設置等待所有的線程都執行完的點,然後再一起開始執行

    舉例說,五個個人一起(並行)包餃子,只有等所有的餃子都包好以後才一起下鍋,得,就這個意思咯。

其API相對來說比較簡單:

構造方法摘要
CountDownLatch(int count)
構造一個用給定計數初始化的 CountDownLatch
方法摘要
void await()
使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷
boolean await(long timeout, TimeUnit unit)
使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷或超出了指定的等待時間。
void countDown()
遞減鎖存器的計數,如果計數到達零,則釋放所有等待的線程。
long getCount()
返回當前計數。
String toString()
返回標識此鎖存器及其狀態的字符串。

 

從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

實例:

public class CountDownLatchDemo {
	final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static void main(String[] args) throws InterruptedException {
    	CountDownLatch latch=new CountDownLatch(2);//兩個線程並行
    	Worker worker1=new Worker("zhang san", 5000, latch);
    	Worker worker2=new Worker("li si", 8000, latch);
    	worker1.start();//
    	worker2.start();//
    	latch.await();//等待所有工人完成工作點
        System.out.println("all work done at "+sdf.format(new Date()));
	}
        
    static 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(){
    		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();
			}
    	}
    }
         
}

實例輸出:

Worker zhang san do work begin at 2015-01-03 21:26:38
Worker li si do work begin at 2015-01-03 21:26:38
Worker zhang san do work complete at 2015-01-03 21:26:43
Worker li si do work complete at 2015-01-03 21:26:46
all work done at 2015-01-03 21:26:46

 

發佈了30 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章