随笔分类 - 源码 / Java 并发
Java 并发
摘要:1 前言 本节主要记录下基于 AQS 衍生出来的一些常用锁比如:CountDownLatch、ReentrantLock、Semaphore、ReentrantReadWriteLock 等他们在源码中的一些应用,好记性不如烂笔头。 2 CountDownLatch 2.1 RocketM
阅读全文
摘要:1 前言 闲来无事,复习复习并发中常用到的一些协调多线程的工具哈。 2 基于Java队列的实现 生产者跟消费者之间要协调,他俩会出现碰撞的地方就是存放东西的容器,所以我们可以直接拿一个线程安全的队列来做容器即可,比如我这里用的 ArrayBlockingQueue: /** * @author: x
阅读全文
摘要:1 前言 这一节我们讲解Tomcat的NioEndPoint中ConcurrentLinkedQueue 的使用。 2 Tomcat的容器结构 本节讲解apache-tomcat-7.0.32-src 源码中ConcurrentLinkedQueue 的使用。 首先介绍 Tomcat 的容器结构以及
阅读全文
摘要:1 前言 看了那么多 Java 提供的队列工具,那么我们这节开始看看哪些地方用到了这些队列哈。 这一节我们讲解logback异步日志打印中ArrayBlockingQueue的使用。 2 异步日志打印模型概述 在高并发、高流量并且响应时间要求比较小的系统中同步打印日志已经满足不了需求 了,这是因为打
阅读全文
摘要:1 前言 这节我们继续看看另一个队列 PriorityBlockingQueue,优先级的哈。 2 PriorityBlockingQueue 介绍 PriorityBlockingQueue 是带优先级的无界阻塞队列,每次出队都返回优先级最高或者 最低的元素。其内部是使用平衡二叉树堆实现的,所以直
阅读全文
摘要:1 前言 JDK 中提供了一系列场景的并发安全队列。总的来说,按照实现方式的不同可分为阻 塞队列和非阻塞队列,前者使用锁实现,而后者则使用CAS非阻塞算法实现。这节我们来看看 ConcurrentLinkedQueue。 2 ConcurrentLinkedQueue 介绍 ConcurrentLi
阅读全文
摘要:1 前言 上一节我们讲解了HashMap底层的实现,但是HashMap不是线程安全的,存在多个线程并发操作的线程安全的问题。今天我们就来看一下ConcurrentHashMap这个数据结构,并发安全版本的Map结构。 2 ConcurrentHashMap内部源码 2.1 内部属性 // 最大容量上
阅读全文
摘要:1 前言 前几节我们分析了一些并发安全的数据结构,分别是CopyOnWrite系列的CopyOnWriteArrayList、BlockingQueue阻塞队列系列的LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue。接下来我们要讲解一个很重要的并发安
阅读全文
摘要:1 前言 看过了LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue等阻塞队列,这节我们又要看一个不一样的队列,SynchronousQueue同步阻塞队列。 2 SynchronousQueue是什么 SynchronousQueue的同步队列,使用的
阅读全文
摘要:1 前言 前两节我们看了BlockingQueue阻塞队列的两个子类,LinkedBlockingQueue、ArrayBlockingQueue,它们都是使用了ReentrantLock、Condition的来实现的,在进行插入操作、拉取数据操作之前为了并发安全都需要进行加锁;然后插入时候在容量满
阅读全文
摘要:1 前言 这节我们就来看看ArrayBlockingQueue内部实现的原理。ArrayBlockingQueue阻塞队列是基于数组来实现的,上一章节的LinkedBlockingQueue是基于链表来实现的。ArrayBlockingQueue内部的实现机制跟LinkedBlockingQueue
阅读全文
摘要:1 前言 这节我们就来看看LinkedBlockingQueue内部实现的原理。 2 LinkedBlockingQueue的使用 在看原理之前我们先来用一用LinkedBlockingQueue,来体验一下: 2.1 插入数据 public class LinkedBlockingQueueTes
阅读全文
摘要:1 前言 这节我们就来看看BlockingQueue阻塞队列是什么都有哪些具体实现。 2 BlockingQueue阻塞队列是什么 BlockingQueue阻塞队列,它是一个提供阻塞功能的队列容器。首先它是一个队列容器,能够存储东西,提供数据入队功能,进行数据存入;提供数据取出功能,进行出队,如下
阅读全文
摘要:1 前言 我们前面看过了volatile、synchronized以及AQS的底层原理,以及基于AQS之上构建的各种并发工具,ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier,那么我们这节该看什么了,是不是要看运用了。在日常的业务编程中经常使用
阅读全文
摘要:1 前言 上节我们看了下ReentrantReadWriteLock读写锁的写锁的申请和释放过程,这节我们就来看下读锁的。 2 线程读锁记录 回顾一下之前的例子,在读写并发操作的时候,读取数据的时候加读锁: public class ReentrantReadWriteLockTest { // 声
阅读全文
摘要:1 前言 上节我们看了下ReentrantReadWriteLock读写锁的属性以及内部结构,我们回顾下:(1)ReentrantReadWriteLock内部有两把锁,读锁ReadLock、写锁WriteLock,基于AQS实现的读写锁并发工具Sync;其中无论读锁还是写锁都是基于Sync进行封装
阅读全文
摘要:1 前言 接下来我们来看看ReentrantReadWriteLock读写锁,也是基于之前讲解的AQS来实现的,建立在AQS体系之上的一个并发工具类,这个锁很重要,在很多开源的中间件中使用的非常广泛,很多场景使用它来减少并发操作中的锁冲突,提升并发能力。 2 ReentrantReadWriteLo
阅读全文
摘要:1 前言 接下来我们来看看Semaphore,也是基于之前讲解的AQS来实现的,建立在AQS体系之上的一个并发工具类。 2 Semaphore是什么 Semaphore,它是一个信号量,主要作用是用来控制并发中同一个时刻执行的线程数量,可以用来做限流器,或者流程控制器。在创建的时候会指定好它有多少个
阅读全文
摘要:1 前言 接下来我们来看看CyclicBarrier,也是基于之前讲解的AQS来实现的,建立在AQS体系之上的一个并发工具类,依赖了ReentrantLock。 2 CyclicBarrier是什么 CyclicBarrier,就是一个计数器栅栏,也就是一个计数器开关。比如CyclicBarrier
阅读全文
摘要:1 前言 接下来我们来看看CountDownLatch,也是基于之前讲解的AQS来实现的,建立在AQS体系之上的一个并发工具类。 2 CountDownLatch是什么 CountDownLatch类似一个有多道锁的门闩,CountDownLatch在创建的时候就指定好有多少道锁链了。假如有个门闩
阅读全文