import java.util.concurrent.*;
CountDownLatch
简介
用来同步线程任务,指定线程执行完毕后,再来执行接下来的任务。
使用
CountDownLatch countDownLatch = new CountDownLatch(3);//此处的数字3代表执行的任务组数
new Thread(new Runnable(){
@override
public void run(){
tttt();
countDownLatch.countDown();//运行一组任务,调用这个方法,数字3便会减一
}
}).start();
countDownLatch.await();//直到执行了3次countDown(),才会执行下边的任务,执行的次数由申明CountDownLatch对象时候,传入的数字决定。
CyclicBarrier
简介
一组任务全部完成后,再接下里继续执行下一组任务。
使用
- public CyclicBarrier(int parties)
- public CyclicBarrier(int parties, Runnable barrierAction)
CyclicBarrier barrier = new CyclicBarrier(3);
//数字3指定这一组中有多少个任务。
for(int i=0;i<3;i++){
new Thread(new Runnable(){
@override
public void run(){
ece();
barrier.await();//一个任务执行完成,等待改组其他任务的执行
www();//当其他任务都执行完成,才会继续都开始执行接下来的任务,也就是这里的www();
}
}).start();
}
还可以设置一个栅栏,当所有任务完成后,运行该栅栏内容,然后再开始执行下一组任务。
CyclicBarrier barrier = new CyclicBarrier(3,new Runnable(){
@override
public void run(){
system.out.println("第一组执行完了");
}
});
... ...