概念 AQS全称 AbstractQueuedSynchronizer。 AQS是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。 ReentrantLock、Semaphore、CountDownLatch、FutrueTask, ...
分类:
其他好文 时间:
2019-12-17 00:54:44
阅读次数:
126
从JDK1.5开始,引入了并发包java.util.concurrent(J.U.C),并发容器里的同步容器AQS(AbstractQueuedSynchronizer)是J.U.C的核心,AQS底层使用双向列表,基于模版方法设计 1、AQS使用Node实现FIFO队列,可以用于构建锁或者其他同步装 ...
分类:
其他好文 时间:
2019-12-16 20:52:09
阅读次数:
105
CountDownLatch 众所周知,它能解决一个任务必须在其他任务完成的情况下才能执行的问题,代码层面来说就是只有计数countDown到0的时候,await处的代码才能继续向下运行,例如: 运行结果: 源码 实际上内部十分简单,里面只有一个AQS的子类 下面看具体做了什么事情 先来看await ...
分类:
其他好文 时间:
2019-12-16 17:33:16
阅读次数:
100
要深入了解java并发知识,AbstractQueuedSynchronizer(AQS)是必须要拿出来深入学习的,AQS可以说是贯穿了整个JUC并发包,例如ReentrantLock,CountDownLatch,CyclicBarrier等并发类都涉及到了AQS。接下来就对AQS的实现原理进行分 ...
分类:
编程语言 时间:
2019-12-15 18:40:11
阅读次数:
107
需求说明 在报表对数据进行汇总统计时,通常是按照某个字段进行分组,比如按地区、类别等字段分组后对其他信息进行汇总,但有一种分组模式为不规则分组,其分组是根据数据的值段来分的,例如按照分数段、年龄段、按时间段等,属于某个值区间的记录归到一个组里如下图所示: 在上图中我们可以看到,报表根据订购日期将订单 ...
分类:
其他好文 时间:
2019-12-15 11:03:03
阅读次数:
87
4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关的操作。 下面分别进行介绍: void lock(); 获取锁。如果锁不可用,出于线程调度目的,将禁 ...
分类:
编程语言 时间:
2019-12-13 19:43:23
阅读次数:
84
故事起源于上次阿里电面的3个问题。问题1,jvm中线程分为哪些状态。问题2,在执行Thread.start()方法后,线程是不是马上运行。问题3,java中的synchronized和ReentrantLock有什么不同。当时我的回答不是很好,就不说了,面试之后,在网上搜了很多文章,对照着jdk源码 ...
分类:
其他好文 时间:
2019-12-11 19:35:01
阅读次数:
93
前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的。本文是AQS系列的第一篇,后面会持续更新多篇,争取将JUC包中AQS相关的常用功能讲清楚,一方面巩固自己的知识体系,一方面亦可与各位园友互相学习。寒 ...
分类:
其他好文 时间:
2019-12-07 23:22:00
阅读次数:
123
aqs实现 基于以下技术栈: 1、自旋 2、park,unpark 3、cas 有什么特点: 1、如果是单个线程的话,或者线程交替执行,那么使用的jvm来实现的,并没有动用到os层 加锁过程: 1、判断当前状态,如果锁现在的状态为0(自由状态),公平锁可能需要判断是否需要排队(hasQueuePro ...
分类:
其他好文 时间:
2019-12-06 19:15:37
阅读次数:
87
aqs实现 基于以下技术栈: 1、自旋 2、park,unpark 3、cas 有什么特点: 1、如果是单个线程的话,或者线程交替执行,那么使用的jvm来实现的,并没有动用到os层 加锁过程: 1、判断当前状态,如果锁现在的状态为0(自由状态),公平锁可能需要判断是否需要排队(hasQueuePro ...
分类:
其他好文 时间:
2019-12-06 19:02:27
阅读次数:
100