Skip to content

Commit 5b7e511

Browse files
authored
feat: 完善多线程和并发的介绍,增加AQS资料
1 parent 4c56e33 commit 5b7e511

1 file changed

Lines changed: 15 additions & 4 deletions

File tree

6. 基础能力/多线程与并发.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@
1010

1111
多线程的知识点有依赖关联性,所以学起来顺序很重要:
1212

13-
1. 开篇:首先我们要学习【内存模型】相关的概念和知识,熟练使用多线程的基础【Thread 类】,知道Thread 线程的基本概念、状态,还有 wait,notify,join 等多线程基本的通信手段
13+
1. 开篇:首先我们要一路溯源下去,为什么会有并发问题?因为硬件工程师优化之后给软件工程师留了坑。为什么要用多线程?因为要平衡CPU和存储的速度差异。那这些优化带来了什么问题呢?知道了并发问题产生的原因之后,才明白【内存模型】要解决的问题 —— 按需禁用优化和缓存
1414

15-
2. 基础:了解过 Thread 之后,我们就要狠扎多线程的基础理论点了,我们要搞懂关键字 【synchronized】和 【volatile】,并且结合第一步学到的【JMM内存模型】来深入体会这 2 个关键字的作用和内存屏障。
15+
2. 基础:学习【内存模型】相关的概念和知识,熟练使用多线程的基础【Thread 类】,知道Thread 线程的基本概念、状态,还有 wait,notify,join 等多线程基本的通信手段。了解过 Thread 之后,我们就要狠扎多线程的基础理论点了,我们要搞懂关键字 【synchronized】和 【volatile】,并且结合第一步学到的【JMM内存模型】来深入体会这 2 个关键字的作用和内存屏障。
1616

1717
3. 进阶:现在我们就知道为什么我们要减少创建线程对象的数量,【线程切换】会带来严重的性能问题,包括:线程上下文切换,线程状态的切换。这就引申出了【锁】、【CAS 原子算法】、【JVM 多锁的优化】、【重入锁】。
1818

1919
4. 应用:到此为止,我想大家对于多线程的理论至少已经有了基本的概念,接下来就要学习多线程的核心:【线程池】 ,除了原理,还要学习在各个【异步库】中,是怎么根据实际场景自定义线程池的,比如 AsyncTask、IntentService、OkHttp。
2020

21-
5. 末章:最后,别忘了,Java 的【并发集合】,如:CopyOnWriteArrayList、ConcurrentHashMap。
21+
5. 末章:最后,别忘了,Java 的【并发集合】,我们从2个方面看:
22+
(1)用锁的手段来解决并发问题,如 AQS、ConcurrentHashMap;
23+
(2)用COW思想来解决并发问题,如 CopyOnWriteArrayList。
2224

2325
相信按照这个顺序,多线程和并发学起来并不吃力,面试官的问题都难不倒你了。
2426

@@ -52,7 +54,16 @@
5254
5355
## 并发库
5456

55-
从整体上来看concurrent包的整体实现图如下图所示
57+
从整体上来看 concurrent 包的整体实现图如下图所示
5658

5759
![concurrent包实现整体示意图](https://s3.ax1x.com/2021/03/01/6i5f9U.png)
5860

61+
最底层是上一层的实现基础。举个例子,图中可见,所有锁的原理都是 AQS,而 AQS 底层又用到了大量的volatile+CAS
62+
63+
### AQS
64+
65+
- [1.5w字,30图带你彻底掌握 AQS!](https://www.gushiciku.cn/pl/puWE)
66+
- [并发——抽象队列同步器AQS的实现原理](https://www.cnblogs.com/tuyang1129/p/12670014.html?from=from_parent_mindnote)
67+
> AQS 是 Java 中管程思想的体现,所有的锁都是由它衍生而来的,比如 ReentrantLock、CountDownLatch、线程池中的不可重入锁。AQS 用了模版方法设计模式,封装了线程同步的关键方式,节省了新建锁的工作量。
68+
69+

0 commit comments

Comments
 (0)