CyclicBarrier没有可以专门计数的计数器,只有通过awai()方法计算被阻塞的线程数是否到达!
案例CountDownLatch
package com.example.dtest.threadTest.use.countDownDifferCyclicBarrier;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTest {
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(5);
for(int i = 0; i < 5; i++){
new Thread(new ReadNum(i,countDownLatch)).start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程执行结束");
}
static class ReadNum implements Runnable{
private int id;
private CountDownLatch latch;
public ReadNum(int id,CountDownLatch latch){
this.id = id;
this.latch = latch;
}
@Override
public void run() {
synchronized (this){
System.out.println("id" + id);
latch.countDown();
System.out.println("线程组任务"+ id + "结束其他任务继续");
}
}
}
}
CyclicBarrier
package com.example.dtest.threadTest.use.countDownDifferCyclicBarrier;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierTest {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(2,new Runnable(){
@Override
public void run() {
System.out.println("线程组执行结束");
}
});
for(int i=0; i< 5; i++){
new Thread(new ReadNum(i,cyclicBarrier)).start();
}
}
static class ReadNum implements Runnable{
private int id;
private CyclicBarrier cyc;
public ReadNum(int id,CyclicBarrier cyc){
this.id = id;
this.cyc = cyc;
}
@Override
public void run() {
synchronized (this){
System.out.println("id:"+id);
try {
cyc.await();
System.out.println("线程组任务"+id + "结束其他任务继续");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}
}



