并发编程
文章平均质量分 94
every__day
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock到底怎么玩儿?
本文写了ReentrantReadWriteLock 基本使用方法,从源码层面讲解了,读锁逻辑,写锁逻辑,读锁计数等等。原创 2023-04-02 17:11:56 · 463 阅读 · 1 评论 -
CompletableFuture 源码分析 thenCombine & thenCompose
CompletableFuture 源码分析,1、supplyAsync 提交任务到线程池, 2、thenCombine 全并两个异步任务,3、thenCompose 更复杂的合并两个任务原创 2023-03-25 20:14:39 · 803 阅读 · 0 评论 -
CompletableFuture 的 allOf 方法底层原理是什么
CompletableFuture 底层原理,通过 allOf / anyOf 两个方法,详细分析源码原创 2023-03-20 01:51:48 · 2396 阅读 · 10 评论 -
BUG探究 ConCurrentHashMap 源码中的 bug
ConCurrentHashMap 源码的 bug 分析,为什么源码错了,也能正常使用!原创 2022-03-17 23:58:11 · 1058 阅读 · 0 评论 -
CountDownLatch 是干啥的,到底难不难?
CountDownLatch 使用示例、原理说明与源码解读原创 2022-01-08 21:13:18 · 599 阅读 · 6 评论 -
ThreadLocal 怎么就内存溢出了,看源码究竟是怎么写的。
ThreadLocal 源码解析、内存溢出问题探究、ThreadLocal 方法的使用原创 2021-12-27 00:08:11 · 678 阅读 · 0 评论 -
semaphore源码解析:信号量到底是个啥?
semaphore 的源码解析。请求许可、释放许可原创 2021-12-19 20:22:27 · 702 阅读 · 2 评论 -
线程池提交任务 execute 和 submit,到底选哪个?
关于线程池,写过两篇文章《线程池基本原理详解》、《定时类线程池工作原理》。这两篇文章,从源码的角度,分析的很详细,文章也很长。这一篇,介绍一个很小的点,使用线程池时,任务提交的方法,execute 和 submit 这两个到底怎么选?一、示例代码先说 Runnable任务,可以这么写 Runnable runnable = new Runnable() { @Override public void run() { System.o原创 2021-08-22 12:32:12 · 1537 阅读 · 1 评论 -
ScheduledThreadPool 源码解析——定时类线程池是如何工作的
延时类的线程池,是如何工作的?scheduleAtFixedRate、scheduleWithFixedDelay 有什么区别,如何实现。原创 2021-04-03 23:23:04 · 1234 阅读 · 0 评论 -
ConCurrentHashMap并发环境时,如何计数的?—— sumCount()、fullAddCount()
ConCurrentHashMap 在并发环境下的计数问题。主要有两个手段。针对源码,本文进行详细的说明原创 2021-03-22 19:30:12 · 1397 阅读 · 4 评论 -
ConCurrentHashMap并发环境下,如何扩容?
ConCurrentHashMap 扩容的源码分析。 sizeCtl 参数的具体应用原创 2021-03-17 22:30:32 · 626 阅读 · 2 评论 -
ConCurrentHashMap源码解析——高并发时,触发扩容:addCount() 方法
ConCurrentHashMap 会自动扩容,而且可能多个线程参与扩容。本篇主要讲下,触发扩容的源码。原创 2021-03-14 09:50:22 · 962 阅读 · 3 评论 -
图解 ConCurrentHashMap ——从源码层面,弄清楚它是怎么控制并发的
ConCurrentHashMap的基本原理,从 插入元素、扩容等等方面,弄明白它是怎么控件并发的。原创 2021-03-10 23:20:22 · 1243 阅读 · 16 评论 -
图解 HashMap 源码——逐行分析源码,面试再也不怕被问HashMap了
HasmMap 的底层原理,讲解源码中的 put、 remove、get方法。原创 2021-02-27 20:55:00 · 350 阅读 · 0 评论 -
HashMap 与 ConCurrentHashMap简单原理
HashMap 和ConcurrentHashMap 的简化版的实现原理。 解析源码前先理解它俩共同的玩法。原创 2021-02-24 22:33:23 · 343 阅读 · 2 评论 -
浅谈阻塞队列 BlockingQueue
关于阻塞队列,具体写过几篇源码剖析的文章。常用的这几个阻塞队列,都逐一解析了一遍。本篇做一个总括的介绍。.原创 2021-02-17 10:06:16 · 267 阅读 · 2 评论 -
图解DelayQueue源码(java 8)——延时队列的小九九
DelayQueue 源码解析,用画图的方式,讲明白延时队列的工作原理。原创 2021-02-16 11:21:34 · 851 阅读 · 0 评论 -
线程池源码解析——四种拒绝策略
ThreadPoolExecutor 类中,线程池的四种拒绝策略。 本文摘录出源码,逐一分析原创 2021-02-15 09:41:49 · 518 阅读 · 5 评论 -
深入理解线程池(ThreadPoolExecutor)——细致入微的讲源码。
本文解析线程池的源码,同时会详细说明以下这些问题。1、线程池状态是怎么控制的2、创建线程是怎么防止并发的3、核心线程数和最大线程数,具体干啥的4、哪些地方用了 AQS 框架5、线程最长存活时间,是怎样控制线程生命周期的6、addWorker 时,传一个空任务,是干嘛的原创 2021-02-13 17:19:39 · 980 阅读 · 7 评论 -
图解线程池——清新脱俗的讲原理
用画图的方式,讲明白线程池的运行逻辑。原创 2021-02-10 17:36:29 · 872 阅读 · 1 评论 -
SynchronousQueue源码解析(非公平模式)
上篇文章,介绍了 SynchronousQueue 的公平模式(源码分析)。这篇文章,从源码入手,解析 非公平模式。如果你对SynchronousQueue不熟悉,可以先看我的这篇文章(图解SynchronousQueue)。一、初始化 SynchronousQueue<Integer> queue = new SynchronousQueue<>(); public SynchronousQueue() { this(false); }原创 2021-01-12 22:56:24 · 348 阅读 · 0 评论 -
SynchronousQueue源码解析(公平模式)
上篇文章中,画图解释了,SynchronousQueue 的工作原理。这篇文章,详细的解析源码(图解 SynchronousQueue原理)。默认你已经读了上篇文章,这篇文章重点说源码。以公平模式为例一、初始化 SynchronousQueue<Integer> queue = new SynchronousQueue<>(true); public SynchronousQueue(boolean fair) { transferer = fair原创 2021-01-10 18:01:35 · 658 阅读 · 1 评论 -
图解 SynchronousQueue(java 8)
SynchronousQueue 是一个特殊的阻塞队列,在线程池中有所应用(CachedThreadPool)。源码不太好理解,今天多画几张图,来说明它的底层原理。一、示例 public static void main(String[] args) throws Exception { SynchronousQueue<Integer> queue = new SynchronousQueue<>(); Thread t1 = new原创 2021-01-10 11:21:09 · 1546 阅读 · 7 评论 -
图解PriorityBlockingQueue源码(java 8)
PriorityBlockingQueue 是一个带有优先级的阻塞队列。基本原理和前面介绍的ArrayBlockingQueue类似。在看这篇文章之前,你可以先仔细看下这篇文章——ArrayBlockingQueue源码解析PriorityBlockingQueue和ArrayBlockingQueue一样,初始化时,可指定队列的大小。不同的是,前者可以自动扩容,而后者不会。另一个很大不同是,前者可以实现优先出队,后者则是先进先出。比如有这么一个场景,一个市场上陆陆续续来了很多卖苹果的。这时来原创 2021-01-04 20:58:35 · 397 阅读 · 0 评论 -
图解LinkedBlockingQueue源码(java 8)
LinkedBlockingQueue是一个阻塞队列,采用双锁技术,性能较 ArrayBlockingQueue有很大的提高。源码层面,有很多地方与ArrayBlockingQueue原理类似。前面写过一篇ArrayBlockingQueue源码解析, 看这篇文章之前,可以先看下。 LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>(); Thread t0 = new T原创 2021-01-02 20:31:49 · 515 阅读 · 0 评论 -
彻底弄懂ArrayBlockingQueue —— 超详细的原码分析
ArrayBlockingQueue 是常见的有界阻塞队列,用过线程池的,对它肯定不陌生。它的实现原理,相信多数人也能说出个大概。可具体实现细节,估计会难住多数人。我在网上查了一圈,大多是讲ArrayBlockingQueue怎么用的。它是怎么阻塞的,却少有人提及。这里,由浅入深,我来剖析下ArrayBlockingQueue的源码,说说它到底是怎么阻塞的。很可能,这是你能看到的,最详细的源码解析,不信的话,耐心看完,再和网上的比较下。当然本人水平有限,若有论述不当之处,请大神指正。ArrayB原创 2020-12-19 23:44:31 · 2020 阅读 · 7 评论 -
ReentrantLock 源码解析(五)—— 公平锁与非公平锁的源码对比
ReentrantLock 公平锁与非公平锁,区别其实很小原创 2020-12-06 12:43:55 · 221 阅读 · 0 评论 -
ReentrantLock 源码解析(四)—— 解锁源码分析
ReentrantLock 解锁源码分析release方法 tryRelease 方法原创 2020-12-06 12:29:14 · 247 阅读 · 0 评论 -
ReentrantLock 源码解析(三)—— 加锁源码分析
ReentrantLock 加锁的源码剖析 acquire(int arg) tryAcquire(arg) addWaiter() acquireQueued()原创 2020-12-06 11:51:09 · 257 阅读 · 0 评论 -
ReentrantLock 源码解析(二)—— 加锁解锁方法概览
ReentrantLock 加锁解锁的基本方法逻辑原创 2020-12-06 11:34:16 · 345 阅读 · 0 评论 -
ReentrantLock 源码解析(一)—— AQS到底是什么
AQS 简单介绍, state, head, tail, node 属性原创 2020-12-06 10:55:42 · 250 阅读 · 0 评论 -
LockSupport.park()被唤醒——unpark()与interrupt()有何不同
背景ReentrantLock 在阻塞线程,用的是LockSupport.park(),(ReentrantLock源码解析)与这对应,唤醒线程,调用LockSupport.unpark()。可看源码时,会发现,调用LockSupport.park(),紧接着会调用Thread.interrupted(),Why? private final boolean parkAndCheckInterrupt() { LockSupport.park(this); // 阻塞线程原创 2020-10-07 23:44:45 · 2029 阅读 · 6 评论 -
彻底弄懂ReentrantLock —— 超详细的原码分析
java1.6 之前, synchronized效率很低,AQS框架就是解决并发问题的首选。我们从 ReentrantLock入手,看下AQS怎么解决并发问题的。如下代码,存在多线程并发问题// TODO用 ReentrantLock 加锁,来看下效果,这里我们用公平锁ReentrantLock lock = new ReentrantLock(true); lock.lock();...原创 2020-10-07 00:15:33 · 2177 阅读 · 15 评论