一 CycilicBarrier 和 CountDownLatch異步
CycilicBarrier:假設有一個場景,每一個線程表明一個運動員,但每一個運動員都準備好了,你們才一塊兒出發,繼續分別執行本身的線程,只要有一個沒準備好,你們都等待。實例化時指定數量,準備好的線程調用await方法,等待數量和指定數量相等時則你們同時出發,分別繼續執行本身的任務函數
CountDownLatch:常常用於監聽某個程序初始化的操做,等待初始化完畢,通知等待線程繼續工做 聲明時須要指定調用countDown次數後發出通知,t1線程調用CountDownLatch的await()方法進行等待,當其餘線程調用CountDownLatch的countDown方法次數等於聲明時指定的次數,則t1繼續工做。應用場景,如創建zookeeper鏈接時,驗證是否鏈接成功,驗證前主線程調用await阻塞,直到鏈接成功調用countDown,則表示鏈接成功,主線程繼續。線程
二者的區別是CountDownLatch一個線程等待,當數量達到時,等待的這個線程繼續執行 CycilicBarrier是多個線程等待,當你們都準備好後一塊兒分別繼續執行對象
二 CallAble 和Future接口
future: 很是適合處理很耗時,很長的業務邏輯時使用,能夠有效減少系統的響應時間,提升系統的吞吐量 ci
futureTask構成函數傳入的實力對象必定要實現callAble,重現call方法get
同時說一下submit和execute的區別,1:submit能夠傳入實現callAble接口的對象;2:submit有返回值,返回future對象it
主線程運行到future.get()的時候就阻塞住了,一直等到任務執行完畢,返回null值,表示任務執行完畢,主線程就能夠跟進執行進度後繼續執行zookeeper
futureTask 的get方法異步調用call方法的執行結果,直到執行完成後get()方法才能獲取結果真後主線程才能繼續執行。get方法阻塞的是每一個線程執行的阻塞,而不是主線程的阻塞程序
場景是futureTask 多個任務並行執行,而後異步取結果