Java JUC ThreadPoolExecutor解析

2022-02-09
阅读 14 分钟
1.3k
线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行任务时就需要 new 一个线程来执行,频繁的创建与销毁非常消耗性能。而线程池中的线程是可以复用的,不需要在每次需要执行任务时候都重新创建和销毁。二是线程池提供了资源限制和管理的手段,比如可以限制线程...
封面图

Java JUC PriorityBlockingQueue解析

2022-02-07
阅读 8 分钟
1.5k
PriorityBlockingQueue 是一个带有优先级的无界阻塞队列,每次出队返回的都是优先级最高或者最低的元素。在内部是使用平衡二叉树堆实现,所以遍历元素不保证有序。
封面图

Java JUC LinkedBlockingQueue解析

2022-01-26
阅读 8 分钟
1.4k
上篇介绍了使用CAS算法实现的非阻塞队列ConcurrentLinkedQueue,本篇介绍的是使用独占锁实现的阻塞队列LinkedBlockingQueue。
封面图

Java JUC ConcurrentLinkedQueue解析

2022-01-25
阅读 10 分钟
1.6k
ConcurrentLinkedQueue 是线程安全的无界非阻塞队列,底层使用单向链表实现,对于入队和出队操作使用 CAS 实现线程安全。
封面图

Java JUC ReentrantReadWriteLock解析

2022-01-24
阅读 13 分钟
1.6k
ReentrantReadWriteLock 和 ReentrantLock 的区别是,ReentrantLock 是独占锁,同一时间只能有一个线程获取锁,但在实际中更多的是读多写少的情况,显然 ReentrantLock 满足不了该情况,而 ReentrantReadWriteLock 采用了读写分离的策略,可以允许多个线程同时进行读取。
封面图

Java JUC ReentrantLock解析

2022-01-21
阅读 8 分钟
1.3k
它具有与synchronized相同的基本行为和语义,但 ReentrantLock 更灵活、更强大,增加了轮询、超时、中断等高级功能,并且还支持公平锁和非公平锁。
封面图

Java JUC 抽象同步队列AQS解析

2022-01-20
阅读 12 分钟
1.5k
AbstractQueuedSynchronizer 抽象同步队列简称 AQS,它是实现同步器的基础组件,并发包中的锁底层都是使用 AQS 来实现的,下面看下 AQS 的类图结构。
封面图

Java JUC LockSupport概述

2022-01-19
阅读 3 分钟
1.2k
LockSupport 类和每个使用它的线程都会关联一个许可证,在默认情况下调用 LockSupport 类的方法是不持有许可证的。LockSupport 是使用 Unsafe 类实现的。
封面图

Java JUC CopyOnWriteArrayList 解析

2022-01-11
阅读 6 分钟
1.8k
在 Java 并发包中的并发 List 只有 CopyOnWriteArrayList,CopyOnWriteArrayList 是一个线程安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。
封面图

Java 并发包原子操作类解析

2022-01-05
阅读 13 分钟
1.8k
JUC 并发包中包含 AtomicInteger、AtomicLong 和 AtomicBoolean 等原子性操作类,原理大致类似,接下来我们看一下 AtomicLong 类。
封面图

Java JUC ThreadLocalRandom类解析

2022-01-03
阅读 8 分钟
1.4k
首先我们先了解一下 Random 类。在 JDK7 以前到现在,java.util.Random 类都是使用较为广泛的随机数生成工具类,而且 java.lang.Math 的随机数生成也是使用的 java.util.Random 类的实例,下面先看看如何使用 Random 类。
封面图