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(); } } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)