记录一下,今天学java并发编程的工具类写一下自己对CountDownLatch类的理解类本身的作用,类似于waitnotify,使线程进入阻塞并唤醒,达到线程通信的目的,看一下实现原理内部使用了同步类容器也就是AQS,Sync对象,count参数是指多线程需要唤醒的次数,内部维护了一个state属性就是count传入的属性,可以当作一个计数器,如果为负数会抛出参数异常。然后实例化sync对象。!
分类:
编程语言 时间:
2018-11-21 20:59:10
阅读次数:
159
一、什么是AQS AQS(AbstractQueuedSynchronize:队列同步器)是用来构建锁或者其他同步组件的基础框架,很多同步类都是在它的基础上实现的,比如常用的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore。 ...
分类:
编程语言 时间:
2018-11-19 21:40:30
阅读次数:
205
AQS 本文章会讲解 AQS 的使用方法,然后通过 DEBUG 跟踪 AQS 执行的一系列操作来分析源码,读者跟着文章 DEBUG 跟踪源码能更容易理解。 AQS 是什么? AbstractQueuedSynchronizer 队列同步器(AQS)是一个抽象类,作为并发工具的基础组件,为真正的实现类 ...
分类:
编程语言 时间:
2018-11-16 23:38:48
阅读次数:
362
之前讲了《AQS源码阅读》和《ReentrantLock源码阅读》,本次将延续阅读下ReentrantReadWriteLock,建议没看过之前两篇文章的,先大概了解下,有些内容会基于之前的基础上阅读。这个并不是ReentrantLock简单的升级,而是落地场景的优化,我们来详细了解下吧。背景JUC包里面已经有一个ReentrantLock了,为何还需要一个ReentrantReadWriteLo
分类:
编程语言 时间:
2018-11-16 20:41:44
阅读次数:
192
AQS,全称`AbstractQueuedSynchronizer`,是Concurrent包锁的核心,没有AQS就没有Java的Concurrent包。它到底是个什么,我们来看看
分类:
编程语言 时间:
2018-11-14 19:07:38
阅读次数:
129
为了性能与使用的场景,Java实现锁的方式有非常多。而关于锁主要的实现包含**synchronized关键字**、**AQS框架下的锁**,其中的实现都离不开以下的策略。
分类:
编程语言 时间:
2018-11-14 19:03:08
阅读次数:
125
目录 1 基本实现原理 1.1 如何使用 1.2 设计思想 2 自定义同步器 2.1 同步器代码实现 2.2 同步器代码测试 3 源码分析 3.1 Node结点 3.2 独占式 3.3 共享式 4 总结 Java并发包(JUC)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,譬如Reent ...
分类:
编程语言 时间:
2018-11-01 15:12:31
阅读次数:
209
java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心。 CountdownLatch 用来控制一个线程等待多个线程。 维护了一个计数器 cnt,每次调用 countDown() 方法会让计数器的值减 1,减到 0 的时候,那些因为调用 awa ...
分类:
其他好文 时间:
2018-10-31 12:33:41
阅读次数:
118
沉淀再出发:关于java中的AQS理解 一、前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的,但是AQS的底层其实也是使用了大量的CAS,因此我们可以看到CAS的重要性了,但是CAS也是有缺陷 ...
分类:
编程语言 时间:
2018-10-28 17:52:39
阅读次数:
185
J.U.C-FutureTask在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,因此Java1.5之后提供了Callable和Future接口,通过它们就可以在任务执行完毕之后得到任务的执行结果。而FutureTask则是J.U.C中的类,但不是AQS的子类,FutureTask是一个可删除的异步
分类:
编程语言 时间:
2018-10-20 10:14:48
阅读次数:
186