之前一篇ReentrantLock的文章如果看过,并且对AQS的代码比较熟知的话,Semaphore的代码阅读起来就相对会轻松很多,如果不熟知的话,可以参考那篇文章或者自行学习下AQS的代码。 这里我们来分析下Semaphore的源码。 Semaphore整理上思路可以理解为一个资源池,资源池中有相 ...
分类:
其他好文 时间:
2018-09-19 19:49:49
阅读次数:
169
超链接钻取是一个非常实用的功能,在各种项目、应用中使用广泛,能够帮助数据分析用户清晰、直观地了解不同层级数据的上下级关系,并聚焦于自己感兴趣的内容。当然,润乾报表也支持这个功能,今天小编主要介绍如何利用润乾报表设计器在报表中实现列表钻取。下面我们以月订单分析为例,举例说明: 实际的需求是要求我们首先 ...
分类:
其他好文 时间:
2018-09-19 17:16:16
阅读次数:
153
1. 前言 Java中好多地方用到AbstractQueuedSynchronizer(PS:简称AQS),比如ReentrantLock、线程池,这部分在面试的时候也经常被问到,今天以ReentrantLock为例,通过源码来加深对AQS的理解 2. lock 通常,我们的用法是这样的: 那么lo ...
分类:
其他好文 时间:
2018-09-12 20:06:42
阅读次数:
199
一 前言 虽然已经有很多前辈已经分析过AbstractQueuedSynchronizer(简称AQS)类,但是感觉那些点始终是别人的,看一遍甚至几遍终不会影响深刻。所以还是记录下来印象更深刻,还能和大家一起探讨(这就是重复造轮子的好处,另外也主要是这篇篇幅太长了,犹豫了好久才决定写作)。既然有很多 ...
分类:
编程语言 时间:
2018-09-08 14:09:00
阅读次数:
183
引言 上一篇文章中详细分析了基于AQS的ReentrantLock原理,ReentrantLock通过AQS中的state变量0和1之间的转换代表了独占锁。那么可以思考一下,当state变量大于1时代表了什么?J.U.C中是否有基于AQS的这种实现呢?如果有,那他们都是怎么实现的呢?这些疑问通过详细 ...
分类:
编程语言 时间:
2018-08-30 10:58:13
阅读次数:
180
1,什么是CAS CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无 ...
分类:
编程语言 时间:
2018-08-25 21:22:56
阅读次数:
279
AQS队列同步器学习 在学习并发的时候,我们一定会接触到 JUC 当中的工具,JUC 当中为我们准备了很多在并发中需要用到的东西,但是它们都是基于 来实现的,也就是我们如果能够去梳理清楚AQS当中的知识点,对我们以后了解其他并发功能键有很大的帮助。 CLH队列 队列同步器(AbstractQueue ...
分类:
编程语言 时间:
2018-08-23 10:09:56
阅读次数:
189
原文链接:https://blog.csdn.net/chenssy/article/details/60781148 AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。 CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当 ...
分类:
其他好文 时间:
2018-08-19 23:22:15
阅读次数:
206
原文链接:https://www.jianshu.com/p/9f98299a17a5 前言 本篇适用于了解ReentrantLock或ReentrantReadWriteLock的使用,但想要进一步了解原理的读者。见于之前的分析都是借鉴大量的JDK源码,这次以流程图的形式代替源码,希望读者能有更好 ...
分类:
其他好文 时间:
2018-08-19 23:19:38
阅读次数:
241
一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLo ...
分类:
编程语言 时间:
2018-08-19 00:51:06
阅读次数:
184