線程同步輔助-CyclicBarrier(搬遷至此)

線程同步輔助-CyclicBarrier指的是屬於同一個線程組中的線程必須在指定的集合點上到齊。其中最重要的方法就是await方法。
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestCyclicBarrier {
public static void main(String[] args){
//創建需要同步三個線程的同步輔助對象
CyclicBarrier barrier=new CyclicBarrier(3);
//創建容量爲三的固定線程池
ExecutorService exec=Executors.newFixedThreadPool(3);
//向線程池中提交三個任務
exec.submit(new Runner(barrier,0,new int[]{4,8,18}));
exec.submit(new Runner(barrier,1,new int[]{1,2,3}));
exec.submit(new Runner(barrier,2,new int[]{4,5,8}));
exec.shutdown();
}
}


import java.util.Date;
import java.util.concurrent.CyclicBarrier;

public class Runner implements Runnable{
private int no=0;//線程序號
private int[] times=null;//到達每個集合點需要的時間,單位爲秒
private CyclicBarrier barrier=null;//同步輔助對象
public Runner(CyclicBarrier barroer,int no, int[] times){
this.no=no;
this.barrier=barroer;
this.times=times;
}

public void run() {
try{
Thread.sleep(times[0]*1000);
System.out.println(new Date()+" thread_"+no);
barrier.await();
Thread.sleep(times[1]*1000);
System.out.println(new Date()+" thread_"+no);
barrier.await();
Thread.sleep(times[2]*1000);
System.out.println(new Date()+" thread_"+no);
barrier.await();


}catch (Exception e) {
// TODO: handle exception
}

}

}
線程池的容量不能小於任務數。。。
發佈了69 篇原創文章 · 獲贊 8 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章