File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
17173 . 进阶:现在我们就知道为什么我们要减少创建线程对象的数量,【线程切换】会带来严重的性能问题,包括:线程上下文切换,线程状态的切换。这就引申出了【锁】、【CAS 原子算法】、【JVM 多锁的优化】、【重入锁】。
1818
19194 . 应用:到此为止,我想大家对于多线程的理论至少已经有了基本的概念,接下来就要学习多线程的核心:【线程池】 ,除了原理,还要学习在各个【异步库】中,是怎么根据实际场景自定义线程池的,比如 AsyncTask、IntentService、OkHttp。
2020
21- 5 . 末章:最后,别忘了,Java 的【并发集合】,如:CopyOnWriteArrayList、ConcurrentHashMap。
21+ 5 . 末章:最后,别忘了,Java 的【并发集合】,我们从2个方面看:
22+ (1)用锁的手段来解决并发问题,如 AQS、ConcurrentHashMap;
23+ (2)用COW思想来解决并发问题,如 CopyOnWriteArrayList。
2224
2325相信按照这个顺序,多线程和并发学起来并不吃力,面试官的问题都难不倒你了。
2426
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+
You can’t perform that action at this time.
0 commit comments