`

CyclicBarrier 源码分析

阅读更多
简介:
CyclicBarrier 实现这么一个功能,比如说吃饭,是不是要等所有人到齐了才能开始吃?CyclicBarrier 就实现了这么一个功能. 所有的线程都互相等待着,等所有的线程到达后,然后执行. CyclicBarrier 还可以实现这么一个功能,当所有人(线程)到齐后,可以先叫服务员上菜,然后所有人再开始吃.

实现原理:

使用 ReentrantLock.condition 实现的. 来一个线程,判断 count 自减后是否等于 0 ,不等于 0 ,则调用 wait 方法自我阻塞,等于 0 ,先执行传入的 runnable 线程,然后唤醒所有的线程.

CyclicBarrier 和 CountDownLatch 的不同点:

CountDownLatch 有两种角色,可以这么理解:比如要计算全班高数、线代、英语的平均成绩和三门课的平均成绩,我们该怎么做了?

思路一:用一个线程,先算高数平均成绩、再算线代平均成绩,最后算英语平均成绩,最后算这三门课的平均成绩.

但是思路一太慢了,我们是不是可以使用多线程来解决这个问题了?

用一个线程算高数的平均成绩,用一个线程算线代的平均成绩,再用一个线程计算英语的平均成绩. 最后再用一个线程计算这三门课的平均成绩.

但是如果保证所有课的平均成绩是在得出三门课的平均成绩了?

这时候就可以使用 CountDownLatch 了. 所以 CountDownLatch 中的两种角色:一个是计算单门课的平均成绩,另一个角色是计算所有课的平均成绩.

CyclicBarrier 就只有一种角色了,就是计算单门课的平均成绩.
1
0
分享到:
评论

相关推荐

    Java并发系列之CyclicBarrier源码分析

    Java并发系列之CyclicBarrier源码分析 CyclicBarrier是Java并发系列中的一种同步工具类,用于实现一组线程相互等待。当所有线程都到达某个屏障点后,再进行后续的操作。下面是对CyclicBarrier源码的详细分析。 ...

    java面试常见基础(深层次,高级研发)

    ##### 23.3 CyclicBarrier源码分析(基于JDK1.7.0_40) - **构造函数**:创建新的CyclicBarrier实例。 - **等待函数**:线程调用await()方法等待。 #### 24. Blockingqueue有几种形式?各自的编码方式。 - **...

    JUC并发编程与源码分析视频课.zip

    《JUC并发编程与源码分析视频课》是一门深入探讨Java并发编程的课程,主要聚焦于Java Util Concurrency(JUC)库的使用和源码解析。JUC是Java平台提供的一组高级并发工具包,它极大地简化了多线程编程,并提供了更...

    Java rt.jar 源码分析

    这篇博客文章《Java rt.jar 源码分析》可能探讨了以下几个关键知识点: 1. **Java基础类库**:rt.jar中的类库涵盖了Java语言的核心功能,包括对象模型、基本类型、集合框架、多线程、网络编程、I/O流、反射、异常...

    java并发源码分析之实战编程

    "java并发源码分析之实战编程"这个主题深入探讨了Java平台上的并发处理机制,旨在帮助开发者理解并有效地利用这些机制来提高程序性能和可扩展性。在这个专题中,我们将围绕Java并发库、线程管理、锁机制、并发容器...

    Java并发包源码分析(JDK1.8)

    Java并发包源码分析(JDK1.8):囊括了java.util.concurrent包中大部分类的源码分析,其中涉及automic包,locks包(AbstractQueuedSynchronizer、ReentrantLock、ReentrantReadWriteLock、LockSupport等),queue...

    JavaCodeAnalysis:Java源码分析学习

    在Java编程世界里,源码分析是提升编程技能和理解框架内部运作机制的关键步骤。"JavaCodeAnalysis"项目正致力于帮助开发者深入理解Java语言及其常用库的底层实现。这个项目包含了一个名为"JavaCodeAnalysis-master...

    疯狂Java flashget源码

    Java提供了多种线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Semaphore、CyclicBarrier等高级并发工具。 2. **并发下载策略**:在FlashGet的实现中,关键在于如何有效地分配和管理...

    java源码分析工具-multiThread:一个java多线程的学习库,包含:源码分析,工具实现,使用样例等

    `multiThread`是一个开源项目,旨在帮助开发者深入理解Java多线程编程,并提供了源码分析、工具实现以及使用样例。这个学习库是学习和实践Java并发编程的理想资源。 1. **Java多线程基础** - Java中的线程是程序...

    jdk:jdk源码分析

    本文将针对"jdk:jdk源码分析"这一主题,对JDK的核心组件进行详细的剖析。 首先,我们来看看JDK的主要组成部分。JDK包含了JRE(Java Runtime Environment),这是执行Java程序的必备环境;JVM(Java Virtual Machine...

    并发编程、juc工具包源码分析笔记

    并发编程是多线程环境下的程序设计,它允许在单个处理器或多个处理器上同时执行...CountDownLatch、CyclicBarrier、Semaphore 等工具)。理解这些工具的工作原理和使用场景,能够帮助开发者编写高效且安全的并发程序。

    JDK1.6源码

    源码分析可以帮助理解类加载的过程,以及如何自定义类加载器。 2. **垃圾收集器** JDK 1.6引入了不同的垃圾收集器,如Serial、Parallel、CMS(Concurrent Mark Sweep)等。通过查看源码,可以理解它们的工作机制,...

    java并发编程源码分析-javaThread:java并发编程实战手册源码分析

    `javaThread`项目则是一个专门针对Java并发编程进行源码分析的实战手册,它旨在帮助开发者深入理解Java线程的内部机制和并发工具的实现原理。 在Java中,`Thread`类是所有线程的基础,它是Java并发模型的核心。`...

    《Java Concurrency in Practice》源码

    源码分析将帮助我们更深入地理解书中的概念和示例。 1. **线程安全**:书中阐述了线程安全的概念,即在多线程环境下,一个类或方法能够正确地处理多个线程的访问,不会导致数据不一致或引发其他意外行为。线程安全...

    图灵Java高级互联网架构师第6期并发编程专题笔记.zip

    04-Java并发线程池底层原理详解与源码分析-monkey 05-并发编程之深入理解Java线程-fox 06-并发编程之CAS&Atomic原子操作详解-fox 07-并发锁机制之深入理解synchronized(一)-fox 08-并发锁机制之深入理解...

    Java编程方法学源码 Java源码 Java编程的艺术

    源码分析可以帮助理解这些概念的实际应用,以及如何通过类和对象组织复杂的系统。 2. **异常处理**:Java提供了丰富的异常处理机制,如try-catch-finally语句块,用于处理程序运行时可能出现的问题。源码可以展示...

    Java并发系列之AbstractQueuedSynchronizer源码分析(概要分析)

    **Java并发系列之AbstractQueuedSynchronizer源码分析概要** **1. AbstractQueuedSynchronizer(AQS)的定义与作用** AbstractQueuedSynchronizer(AQS)是Java并发编程中的核心组件,它是一个抽象的、基于FIFO...

    java多线程并发实战和源码

    Java多线程并发实战与源码分析是Java开发中至关重要的一部分,它涉及到程序性能优化、系统资源高效利用以及复杂逻辑的正确同步。本书主要聚焦于Java多线程的基础理论和实际应用,虽然书中实例和源码相对较少,但仍然...

    java类源码-java_study_daily:放置一些jdk源码分析,日常开发中用到的一些工具类,以及其他相关的学习内容

    在Java编程语言的世界里,源码分析是提升开发者技能的关键环节。`java_study_daily`项目显然是一个专注于Java学习和日常开发实践的资源集合。在这个压缩包中,我们可能找到对JDK(Java Development Kit)核心类库的...

    并发工具类及线程池1

    **源码分析** CyclicBarrier的内部实现涉及到线程同步和条件判断。`await()`方法实际上是线程等待的核心,它会阻塞直到满足特定条件(所有线程到达屏障点)或遇到异常情况(如中断、超时或屏障被重置)。`isBroken()...

Global site tag (gtag.js) - Google Analytics