笔记 第14章 多线程(13)栅栏_java核心

 

笔记 第14章 多线程(13)栅栏_java_02

 14.10.3 栅栏

CyclicBarrier 可以把任务集中到栅栏,当所有线程都准备好时,就继续运行

创建:CyclicBarrier barrier = new CyclicBarrier(num);

等待:barrier.await();

和前面CountDownLatch的区别:

🍰 await 会抛出一个 BrokenBarrierException

🍰 CyclicBarrier 无法进行 countDown 只能等待线程执行到await()指定数目后才能继续执行

🍰 CyclicBarrier 是可以重用的,等待全部释放后可以重用

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class Main{
public static void main(String[] args) throws InterruptedException {
Main solution = new Main();

CyclicBarrier c = new CyclicBarrier(10);
for(int i = 0; i < 20; i++){
Thread t = new Thread(new A(c,"number "+i));
t.start();
Thread.sleep(1000);
}


}
}

class A implements Runnable{
private CyclicBarrier c;
private String name;
public A(CyclicBarrier c,String name){
this.c = c;
this.name = name;
}

@Override
public void run() {
try {
c.await();
System.out.println(name+" is Running"+System.currentTimeMillis());
Thread.sleep(1000);
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

执行结果:

20个线程分为2组通过栅栏,每组执行时间相同

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

笔记 第14章 多线程(13)栅栏_执行时间_03

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步

公众号 钰娘娘知识汇总 

笔记 第14章 多线程(13)栅栏_java核心_04