`

CountDownLatch 源码分析

 
阅读更多
思路分析:


CountDownLatch 的思路是:首先申请锁的时候,假设以 6 申请锁. 此时线程阻塞. 参考独占锁中的重入锁.

此时:假设一个独占锁多次申请锁的话,那么假设此时 state = 6.

这时候就跟共享锁初始的时候申请锁差不多了.


现在每调用一次 countDown 方法的时候,state -1

当 state = 0 的时候,是不是说明没有再占用锁了?那么此时线程就可以执行了.



CountDownLatch 的实现思路从始至终只有一个线程在队列中,也就是主线程.

它的 countDown 方法只是将 state 减一. 当 count=0时,调用 doReleaseShared 方法释放锁.



而他的 await 方法从始至终就是一个线程在自旋,然后自我阻塞. 然后 await 方法返回,继续执行.
0
0
分享到:
评论

相关推荐

    wardseptember#notes#CountDownLatch源码分析1

    简介countDownLatch这个类使一个主线程等待其他线程执行完毕后再执行。它是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,

    Java并发系列之CountDownLatch源码分析

    Java并发系列之CountDownLatch源码分析 CountDownLatch是一种非常有用的工具类,用于拦截一个或多个线程,使其在某个条件成熟后再执行。它的内部提供了一个计数器,在构造闭锁时必须指定计数器的初始值,且计数器的...

    CountDownLatch源码解析之await()

    CountDownLatch源码解析之await() CountDownLatch是Java并发编程中常用的同步工具,通过await()方法可以让当前线程处于阻塞状态,直到锁存器计数为零(或者线程中断)。下面我们将详细解析CountDownLatch源码之...

    CountDownLatch源码解析之countDown()

    CountDownLatch源码解析之countDown()方法详解 CountDownLatch是Java并发编程中的一种同步工具,用于控制线程的执行顺序。其中,countDown()方法是CountDownLatch的核心方法之一,负责减少计数器的值,并在计数器值...

    framework-analysis:对使用Hibernate出现的问题进行分析;Spring、MyBatis、AQS、ThreadPoolExecutor、CountDownLatch核心源码分析

    于是乎到现在的Hibernate、MyBatis、Spring、Spring MVC、AQS、ThreadPoolExecutor、CountDownLatch使用场景和核心源码分析。 感觉自己还是真的菜鸡,有太多框架的底层实现都不怎么了解。 当山头被一座一座攻克时,...

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

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

    多线程countDownLatch方法介绍

    本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始化时设定一个初始值,通常表示一个任务的子任务数量。每个线程完成其工作后会调用`countDown()`方法,...

    AQS源码分析 (1).pdf

    接下来,我们来具体分析一下AQS的源码。AQS中定义了一个名为state的volatile变量,用于表示同步状态。这个变量有三种操作方法:getstate()、setstate()和compareAndSetState(),分别用于获取、设置和原子性地更新...

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

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

    Java并发系列之AbstractQueuedSynchronizer源码分析(条件队列)

    在本篇中,我们将深入分析AQS的条件队列,它是实现高级同步机制如`ReentrantLock`和`CountDownLatch`的关键部分。 条件队列是AQS中与`Condition`接口相关的部分,它允许线程在满足特定条件时等待,而不是简单地阻塞...

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

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

    源码详解CountDownLatch

    让我们详细分析 CountDownLatch 的主要方法: 1. **构造函数**: - `CountDownLatch(int count)`:构造函数接收一个整数参数,表示计数器的初始值。如果传入的值小于零,会抛出 `IllegalArgumentException`。 2. ...

    Java并发 结合源码分析AQS原理

    Java并发结合源码分析AQS原理 Java并发编程中,AQS(AbstractQueuedSynchronizer)是一个核心组件,它提供了一个基于FIFO队列和状态变量的基础框架,用于构建锁和其他同步装置。在这篇文章中,我们将深入探讨AQS的...

    7 AQS源码分析.docx

    本文将详细分析AQS的源码,探讨其工作机制,以及在Java中如何实现不同类型的锁。 首先,我们需要了解锁的基本类型。在Java中,锁主要分为两类:悲观锁和乐观锁。悲观锁认为并发操作会导致数据不一致,因此在操作...

    JavaCodeAnalysis:Java源码分析学习

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

    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 等工具)。理解这些工具的工作原理和使用场景,能够帮助开发者编写高效且安全的并发程序。

    jdk-code-any:jdk源码分析

    【标题】"JDK源码分析" 在Java开发领域,深入理解JDK源码是提升技术能力的关键步骤。JDK,即Java Development Kit,是Java编程语言和平台的基础,包含了编译器、运行时环境(JVM)、类库以及各种工具。通过分析JDK...

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

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

Global site tag (gtag.js) - Google Analytics