
Java并发编程
文章平均质量分 90
java并发编程
Elson_6
Talk is cheap, show me the code.
展开
-
并发容器(四) — DelayQueue 源码解析
DelayQueue 源码解析一、概述二、源码解析1. 入队2. 出队3. 延迟功能的实现一、概述DelayQueue 是一个无界阻塞队列,它提供了在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素 (通过最小堆实现)。DelayQueue 队列本身不具备存储能力,而是在内部通过 PriorityQueue 队列来实现存储功能和获取最近过期元素功能。PriorityQueue ...原创 2020-03-19 18:18:15 · 229 阅读 · 0 评论 -
并发容器(三) — PriorityBlockingQueue(优先队列)源码解析
PriorityBlockingQueue源码解析一、概述二、三、一、概述PriorityBlockingQueue 是一个支持优先级的无界阻塞队列。队列内部使用 数组 存储数据。由于数组初始化时,长度已经确定,而PriorityBlockingQueue又是一个无界队列,因此内部存在自动扩容机制 (类似ArrayList)。PriorityBlockingQueue 使用最小堆来实现...原创 2020-03-19 14:36:12 · 275 阅读 · 0 评论 -
并发容器(二) — ArrayBlockingQueue源码解析
ArrayBlockingQueue源码解析一、概述二、源码解析1. 构造函数2. 实际入队、出队的操作3. 有阻塞功能的入队、出队操作4. 有超时且非阻塞的入队、出队操作三、小结一、概述ArrayBlockingQueue 是一个用数组实现的有界阻塞队列。ArrayBlockingQueue的数据结构:上图涉及:ReentrientLock、Condition、BlockingQueu...原创 2020-03-17 16:27:10 · 219 阅读 · 1 评论 -
并发容器(一) — 综述
综述一、概述二、三、一、概述在并发编程中,有时需要使用线程安全的队列。实现一个线程安全的队列有两种方式:第一种方式:使用阻塞算法,使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。第二种方式:使用非阻塞算法。非阻塞的实现方式是使用循环CAS的方式来实现。JDK中提供了如下并发容器。二、三、...原创 2020-03-17 14:05:21 · 189 阅读 · 0 评论 -
Lock(五) — LockSupport 和 Condition接口
LockSupport 和 Condition接口一、概述二、Condition 接口与示例1. 使用示例2. Condition 接口三、Condition 实现原理1. 等待队列2. 等待3. 通知4. Condition 的应用四、LockSupport一、概述任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上)。主要包括 wait()、wait(lo...原创 2020-03-15 22:15:57 · 329 阅读 · 0 评论 -
Lock(四) — 可重入锁(ReentrantLock)源码解析
ReentrantLock源码解析一、概述二、ReentrantLock 类图三、源码解析1. ReentrantLock 的使用2. ReentrantLock 锁的获取四、小结1. 如何实现公平锁?2. 如何实现非公平锁?一、概述重入锁: 当该锁被线程A持有时,线程A仍可以重新获取该锁。公平锁: 在获取锁时,如果线程A先对锁进行获取,则当锁释放后,线程A优先获得锁。非公平锁: 在获取锁...原创 2020-03-15 17:03:57 · 379 阅读 · 0 评论 -
Lock(三) — 自定义AQS (实践)
自定义AQS一、概述二、自定义AQS三、调试一、概述上一篇分析了 Lock(二) — 队列同步器(AQS)浅析 后,这里自己实现一个AQS。二、自定义AQS// 自定义一个独占锁(同一时刻,只有一条线程可以访问资源)public class CustomLock implements Lock { // 自定义同步器 class Sync extends AbstractQ...原创 2020-03-15 10:13:06 · 364 阅读 · 0 评论 -
Lock(二) — 队列同步器(AQS)浅析
队列同步器 AQS 一、概述二、同步器的方法1. 同步器可重写的方法2. 同步器中的模板方法三、独占式1. 获取同步状态( acquire(int arg) )四、共享式一、概述队列同步器 AbstractQueuedSynchronizer(简称AQS),是用来构建锁或者其他同步组件的基础框架。AQS 依托于一个 volatile 修饰的变量 state 进行状态管理,AQS 内部提供了如...原创 2020-03-14 22:55:38 · 347 阅读 · 0 评论 -
Lock(一) — 综述
在并发编程中,可以通过关键字 `synchronized` 和 `Lock` 来实现同步访问。原创 2020-03-14 22:55:00 · 254 阅读 · 0 评论 -
Executor框架(四) — ThreadPoolExecutor源码解析
ThreadPoolExecutor源码解析一、概述二、ThreadPoolExecutor 执行任务示意图三、ThreadPoolExecutor 源码分析1. 构造参数的含义2. 常量补码的相关知识runState 几种状态的说明3. 提交任务execute()submit()4. addWorker(Runnable firstTask, boolean core) 方法5. Worker ...原创 2020-03-08 12:34:38 · 353 阅读 · 0 评论 -
Executor框架(三) — 几种常见的线程池
几种常见的线程池一、概述二、ThreadPoolExecutor 线程池1. FixedThreadPool2. SingleThreadExecutor3. CachedThreadPool三、ScheduledThreadPoolExecutor线程池一、概述如下图所示,Executor框架中线程池的类型有如下2种:ThreadPoolExecutor、ScheduledThreadPoo...原创 2020-03-04 17:21:26 · 934 阅读 · 0 评论 -
Executor框架(二) — 线程池原理浅析
线程池的浅析一、概述二、线程池实现原理2.1 线程池实现原理2.2 ThreadPoolExecutor的实现方案1. ThreadPoolExecutor执行execute()方法的示意图如下:2. JDK1.8 `ThreadPoolExecutor.execute()` 代码如下:三、线程池的使用3.1 线程池的创建3.2 提交任务3.3 关闭线程池3.4 合理分配线程池3.5 线程池的监控...原创 2020-03-04 14:15:17 · 341 阅读 · 0 评论 -
Executor框架(一) — 浅析 Executor 框架设计
本文介绍来 JDK中 Executor 框架,分析来框架的调度模型、类图之间的关系。原创 2016-10-19 21:28:03 · 507 阅读 · 0 评论