和CountDownLatch有点类似,CyclicBarrier也是类似一个栅栏操作----等待子线程全部执行完再执行下个动作;但是CyclicBarrier能重复使用,CountDownLatch只能用一次,
public class CyclicBarrierDemo {
public static class Soldier implements Runnable{
private String soldier;
private final CyclicBarrier cyclic;
Soldier(CyclicBarrier cyclic,String soldierName){
this.cyclic=cyclic;
this.soldier=soldierName;
}
@Override
public void run() {
try {
System.out.println(soldier+"报道");//执行士兵报道任务
cyclic.await();//等所有士兵报道完成执行CyclicBarrier中定义的BarrierRun动作
doWork();//CyclicBarrier清零,执行士兵工作任务
cyclic.await();//等所有士兵工作完成执行CyclicBarrier中定义的BarrierRun动作
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
void doWork(){
try {
Thread.sleep(Math.abs(new Random().nextInt()%10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(soldier+":任务完成");
}
}
public static class BarrierRun implements Runnable{
public BarrierRun(boolean flag, int n) {
this.flag = flag;
this.N = n;
}
boolean flag;
int N;
@Override
public void run() {
if(flag){
System.out.println("司令:[士兵" +N+"个,任务完成!]");
}else{
System.out.println("司令:[士兵" +N+"个,集合完毕!]");
flag=true;
}
}
}
public static void main(String[] args) {
final int N=3;
Thread[] allSoldier=new Thread[N];
boolean flag=false;
CyclicBarrier cyclic=new CyclicBarrier(N,new BarrierRun(flag,N));
System.out.println("集合队伍");
for(int i=0;i<N;i++){
allSoldier[i]=new Thread(new Soldier(cyclic,"士兵"+i));
allSoldier[i].start();
}
}
}
执行结果如下:
集合队伍
士兵1报道
士兵2报道
士兵0报道
司令:[士兵3个,集合完毕!]
士兵1:任务完成
士兵2:任务完成
士兵0:任务完成
司令:[士兵3个,任务完成!]
解析:定义了一个CyclicBarrier cyclic=new CyclicBarrier(N,new BarrierRun(flag,N));N代表子任务有N个,当子任务都完成时执行BarrierRun任务;
cyclic.await();表示等所有子任务完成就会去执行CyclicBarrier中定义的BarrierRun任务;
转载于:https://my.oschina.net/u/3734816/blog/3060372
分享到:
相关推荐
这本"Java并发编程学习笔记"可能是作者在深入研究Java并发特性、工具和最佳实践过程中积累的心得体会。下面,我们将根据这个主题,探讨一些关键的Java并发编程知识点。 1. **线程与进程**:在多任务环境中,线程是...
10. **Java并发编程**:包括线程池、锁机制(如synchronized、ReentrantLock)、并发容器(如ConcurrentHashMap、CopyOnWriteArrayList)以及并发工具类(如CountDownLatch、CyclicBarrier)。 这些是Java基础知识...
《Java JDK 6 学习笔记》这本书很可能是为了帮助读者深入理解和掌握这个版本的Java编程语言及其开发环境。以下是一些关键知识点的详细说明: 1. **自动装箱与拆箱**:Java 6中引入了自动装箱和拆箱功能,使得基本...
这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...
这个压缩包包含的学习笔记和习题集全面覆盖了Java架构师所需的核心知识点,下面我们将深入探讨其中的关键内容。 1. **Java基础** - **数据类型与变量**:理解基本数据类型、引用数据类型,以及它们在内存中的存储...
《良葛格java jdk 5.0学习笔记》是一份深入探讨Java编程语言核心特性的资源,特别针对Java Development Kit (JDK) 5.0版本。这份笔记旨在帮助初学者和有经验的开发者更好地理解和掌握Java 5.0的新特性,提升编程技能...
这份"Java并发实践-学习笔记"涵盖了这个关键主题,旨在帮助开发者深入理解和掌握Java中的并发机制。以下是对这份笔记可能包含的一些核心知识点的详细阐述: 1. **Java并发基础**:首先,笔记可能会介绍Java并发的...
本学习笔记将深入探讨JavaSE的基础知识,帮助你构建坚实的编程基础。 首先,我们从“javase学习笔记”开始。这部分内容可能涵盖了以下几个关键知识点: 1. **环境配置**:安装JDK(Java Development Kit),设置...
Java学习笔记第四部分主要涵盖了Java编程语言的深入学习内容,可能是继基础语法、面向对象编程之后的高级主题。"良葛格"作为编著者,可能以易懂且实用的方式阐述了这些概念。以下是根据标题和描述可能包含的知识点:...
良葛格的这份学习笔记旨在帮助初学者和有经验的开发者更好地理解和利用这些新特性。以下是笔记中可能包含的关键知识点: 1. **泛型(Generics)**:Java 5.0引入了泛型,允许在类、接口和方法中使用类型参数,增强...
这篇“java学习笔记”可能包含了从基础到进阶的各种Java编程概念和技术。以下是对这些笔记可能涵盖的一些关键知识点的详细说明: 1. **Java基础知识**: - **语法**:包括变量声明、数据类型(如整型、浮点型、...
本学习笔记将深入探讨JUC的基础知识,帮助你理解和掌握Java并发编程的核心概念。 在Java中,多线程是实现并发的主要方式。一个线程是程序执行的一个流,多线程则意味着一个程序内可以同时执行多个线程。Java提供了...
《良葛格Java JDK 5.0学习笔记》是一份详尽的教程资源,旨在帮助开发者深入理解并掌握Java开发工具包(Java Development Kit)的第5个主要版本——JDK 5.0。这份笔记涵盖了JDK 5.0中的核心特性、改进和新功能,是...
CountDownLatch用于一次性让多个线程等待,CyclicBarrier则允许一组线程等待直到所有线程到达屏障点后一起继续执行,Semaphore管理有限资源的访问权限。 6. **线程池原理**: 线程池通过预先创建一组线程,复用...
它包含了一系列的问题、答案以及相关的学习笔记,旨在帮助Java开发者和求职者更好地理解和掌握架构设计的核心概念,提升面试表现。 首先,Java架构面试通常会涵盖以下几个核心领域: 1. **基础知识**:这是面试的...
Java学习笔记是初学者探索Java编程世界的宝贵资源。这份由老师精心整理的课程笔记涵盖了Java的基础到进阶知识,旨在帮助新手快速理解并掌握这门强大的面向对象编程语言。笔记内容可能包括但不限于以下方面: 一、...
这份资源包含了详细的面试问题和答案,以及相关的学习笔记,旨在帮助Java工程师更好地准备面试,提升自身的技术素养。下面,我们将深入探讨其中可能涉及的一些核心知识点。 1. **Java基础** - **内存管理**:包括...
"JUC并发编程学习笔记(硅谷)"很可能包含了关于Java并发工具集(Java Util Concurrency, JUC)的深入理解和实战经验。JUC是Java标准库提供的一套强大的并发处理工具,它极大地简化了多线程编程,提高了程序的可读性...
总的来说,JUC学习笔记涵盖了Java多线程编程的主要方面,包括线程的创建与管理、同步机制、并发容器以及协调工具的使用,这些都是提升Java并发编程能力的关键知识点。通过深入理解和熟练应用这些工具,开发者可以更...
本资料包“Java基础及高级学习笔记.zip”涵盖了Java的基础知识、进阶概念以及与面试相关的知识点,旨在帮助学习者从入门到精通,提升专业技能。 首先,"java基础.docx"文件详细讲解了Java的基础内容。这部分通常...