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
}
}
}
線程池的容量不能小於任務數。。。