CyclicBarrier使用:
假設一個場景:每個線程代表一個運動員,當運動員都準備好後才一起出發,只要有一個人沒有準備好就一起等待。
CyclicBarrier cb = new CyclicBarrier(3);
ExecutorService pool = Executors.newFixedThreadPool(3);
pool.submit(new Thread(new Runnable() { run(){
cb.await();
}});
pool.submit(new Thread(new Runnable() { run(){
cb.await();
}});
pool.submit(new Thread(new Runnable() { run(){
cb.await();
}});
pool.shutdown(); //同時啓動
如果線程數小於3會一直等待下去
CoutDwonLacth使用:
經常用於監聽某些初始化操作,主線程可以通過await()方法直接進入阻塞狀態,其他線程進行初始化,初始化完畢後通過countdown()喚醒主線程繼續執行操作。
Callable和Future的結合使用:
其實就是jdk基於future模式的一個封裝,當主線程需要數據又不立即需要使用時,主線程繼續向下執行,future模式會悄悄另起線程去執行真正的任務,執行完畢後放進FutureStak類中,當主線程需要數據時就從該類中取出。體現的是異步加載的策略。