高并发
文章平均质量分 95
洋洋yang羊
这个作者很懒,什么都没留下…
展开
-
Phaser 使用介绍
本文将介绍 java.util.concurrent.Phaser,一个常常被大家忽略的并发工具。它和 CyclicBarrier 以及 CountDownLatch 很像,但是使用上更加的灵活,本文会进行一些对比介绍。和之前的文章不同,本文不写源码分析了,就只是从各个角度介绍下它是怎么用的。本文比较简单,我觉得对于初学者大概需要 20 分钟左右吧。其实我对这个需要多少时间很没概念,有没有读者愿意记录下所花费的时间,在评论区反馈一下。使用示例我们来实现一个小需求,启动 10 个线程执行任务,由于原创 2021-12-28 09:39:18 · 1710 阅读 · 0 评论 -
Java 读写锁 ReentrantReadWriteLock 源码分析
本文内容:读写锁 ReentrantReadWriteLock 的源码分析,基于 Java7/Java8。阅读建议:虽然我这里会介绍一些 AQS 的知识,不过如果你完全不了解 AQS,看本文就有点吃力了。目录使用示例下面这个例子非常实用,我是 javadoc 的搬运工:// 这是一个关于缓存操作的故事class CachedData { Object data; volatile boolean cacheValid; // 读写锁实例 final Reentr原创 2021-12-28 09:38:33 · 159 阅读 · 0 评论 -
Java 并发基础之内存模型
很久没更新文章了,对隔三差五过来刷更新的读者说声抱歉。关于 Java 并发也算是写了好几篇文章了,本文将介绍一些比较基础的内容,注意,阅读本文需要一定的并发基础。本文的主要目的是让大家对于并发程序中的重排序、内存可见性以及原子性有一定的了解,同时要能准确理解 synchronized、volatile、final 几个关键字的作用。另外,本文还对双重检查形式的单例模式为什么需要使用 volatile 做了深入的解释。并发三问题这节将介绍重排序、内存可见性以及原子性相关的知识,这些也是并发程序为什原创 2021-12-28 09:37:35 · 123 阅读 · 0 评论 -
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚。终归是希望能降低大家学习的成本,不希望大家到处找各种不是很靠谱的文章,看完一篇又一篇,可是还是模模糊糊。阅原创 2021-12-28 09:36:45 · 218 阅读 · 0 评论 -
深度解读 java 线程池设计思想及源码实现
我相信大家都看过很多的关于线程池的文章,基本上也是面试的时候必问的,如果你在看过很多文章以后,还是一知半解的,那希望这篇文章能让你真正的掌握好 Java 线程池。本文一大重点是源码解析,同时会有少量篇幅介绍线程池设计思想以及作者 Doug Lea 实现过程中的一些巧妙用法。本文还是会一行行关键代码进行分析,目的是为了让那些自己看源码不是很理解的同学可以得到参考。线程池是非常重要的工具,如果你要成为一个好的工程师,还是得比较好地掌握这个知识,很多线上问题都是因为没有用好线程池导致的。即使你为了谋生,也要知原创 2021-12-28 09:35:46 · 238 阅读 · 0 评论 -
深入分析 java 8 编程语言规范:Threads and Locks
2018-02-27评论区的 xupeng.zhang 提出了一个我之前没碰到过的情况,推翻了我之前的一个错误理解,修改了相应的内容。2017-11-28更新了 17.1、17.2、17.3,更正一些不合理的描述,修改一些话术,使读者理解起来更容易,这遍更新下来,这三节应该说已经很严谨了,读者如果还有不懂,请在评论区留言。2017-11-29更新 17.4 内存模型一节,修改了一些容易引起歧义的描述2017-12-11更新 17.5 及其后面的内容,对于 final 的语义介绍还是不够精彩,.原创 2021-12-28 09:34:51 · 345 阅读 · 0 评论 -
解读 java 并发队列 BlockingQueue
最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括我自己在仔仔细细看源码之前,也有许多的不解,甚至有些地方我一直都没有理解到位。说到线程池实现,那么就不得不涉及到各种 BlockingQueue 的实现,那么我想就 BlockingQueue 的问题和大家分享分享我了解的一些知识。本文没有像之前分析 AQS 那样一行一行源码分析了,不过还是把其中最重要和最难理解的代码说了一遍,所以不免篇幅略长。本文涉及到比较多的 Doug Lea 对 BlockingQueue 的设计思原创 2021-12-28 09:33:41 · 263 阅读 · 0 评论 -
一行一行源码分析清楚 AbstractQueuedSynchronizer (三)
这篇文章是 AQS 系列的最后一篇,第一篇,我们通过 ReentrantLock 公平锁分析了 AQS 的核心,第二篇的重点是把 Condition 说明白,同时也说清楚了对于线程中断的使用。这篇,我们的关注点是 AQS 最后的部分,AQS 共享模式的使用。有前两篇文章的铺垫,剩下的源码分析将会简单很多。本文先用 CountDownLatch 将共享模式说清楚,然后顺着把其他 AQS 相关的类 CyclicBarrier、Semaphore 的源码一起过一下。相对来说,如果读者有前面两篇文章的基础,这原创 2021-12-28 09:32:46 · 143 阅读 · 0 评论 -
一行一行源码分析清楚 AbstractQueuedSynchronizer (二)
文章比较长,信息量比较大,建议在 pc 上阅读。文章标题是为了呼应前文,其实可以单独成文的,主要是希望读者看文章能系统看。本文关注以下几点内容:深入理解 ReentrantLock 公平锁和非公平锁的区别深入分析 AbstractQueuedSynchronizer 中的 ConditionObject深入理解 Java 线程中断和 InterruptedException 异常基本上本文把以上几点都说清楚了,我假设读者看过上一篇文章中对 AbstractQueuedSynchronizer原创 2021-12-28 09:31:45 · 115 阅读 · 0 评论 -
一行一行源码分析清楚AbstractQueuedSynchronizer
在分析 Java 并发包 java.util.concurrent 源码的时候,少不了需要了解 AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是 Java 并发包的基础工具类,是实现 ReentrantLock、CountDownLatch、Semaphore、FutureTask 等类的基础。Google 一下 AbstractQueuedSynchronizer,我们可以找到很多关于 AQS 的介绍,但是很多都没有介绍清楚,因为大部分文章没有把其中的一些关键的原创 2021-12-28 09:30:38 · 166 阅读 · 0 评论