笔记 第14章 多线程(13)栅栏
原创
©著作权归作者所有:来自51CTO博客作者钰娘娘ynn的原创作品,请联系作者获取转载授权,否则将追究法律责任
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组通过栅栏,每组执行时间相同
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
相关内容:选择 《Java核心技术 卷1》查找相关笔记
评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步
公众号 钰娘娘知识汇总