參考書籍《Java併發編程的藝術》
一、併發編程的基礎
1、多線程上下文切換
概念:https://www.cnblogs.com/xrq730/p/5186609.html
2、如何減少上下文切換
方式: https://www.jianshu.com/p/1dd95d9bc8c5
a、無鎖編程
b、Cas算法:
c、使用最少線程
d、使用協程:單線程執行多個任務的方式,減少線程切換
3、死鎖產生的條件和解決方式:
條件: https://blog.csdn.net/hd12370/article/details/82814348
http://c.biancheng.net/view/1236.html
解決方式:
http://c.biancheng.net/view/2620.html
https://blog.csdn.net/ysl1242157902/article/details/52904883
4、線程間的通信方式
https://juejin.im/post/5d595558e51d4561ac7bccc4
https://www.cnblogs.com/lgyxrk/p/10404839.html
5、Java的各種鎖
https://www.cnblogs.com/jyroy/p/11365935.html
6、線程間的狀態轉換
二、多線程關鍵字
1、volatile的實現原理
CPU原理
內存語義原理
https://baijiahao.baidu.com/s?id=1655055831382625926&wfr=spider&for=pc
volatile不能確保原子性的原因:
https://www.zhihu.com/question/329746124
2、synchronized的實現原理
實現原理:
https://www.jianshu.com/p/e62fa839aa41
鎖升級:
https://blog.csdn.net/tongdanping/article/details/79647337
https://blog.csdn.net/baidu_38083619/article/details/82527461
https://juejin.im/post/5c936018f265da60ec281bcb
3、如何保證原子性(CAS和鎖)
https://www.jianshu.com/p/435dc89816cd
三、多線程java內存模型
1、java指令重排序
https://blog.csdn.net/yjp198713/article/details/78839698
https://tech.meituan.com/2014/09/23/java-memory-reordering.html (美團技術)
2、重排序對多線程的影響
https://www.jianshu.com/p/586e44045453
3、as-if-serial語義
https://blog.csdn.net/Lzz0614/article/details/89975284
4、happen-before的含義和原則
https://www.jianshu.com/p/1508eedba54d/
https://www.cnblogs.com/fanyi0922/p/11486580.html
5、volatile的內存語義
https://www.cnblogs.com/yuanfy008/p/9335168.html
6、final的內存語義
https://www.cnblogs.com/senlinyang/p/7875468.html
7、鎖的內存語義
https://www.cnblogs.com/yuanfy008/p/9346925.html
四、併發包底層依賴原理
1、AQS(AbstractQueuedSynchronizer) 結合源碼
https://www.jianshu.com/p/cc308d82cc71
共享鎖
https://www.jianshu.com/p/1161d33fc1d0
2、CAS 以及相關問題
https://juejin.im/post/5a73cbbff265da4e807783f5
ABA問題的處理 (AtomicStampedReference)
https://www.jianshu.com/p/8b227a8adbc1
AtomicStampedReference的原理
https://blog.csdn.net/lizc_lizc/article/details/102989288
3、Unsafe的實現原理
https://www.jianshu.com/p/db8dce09232d
4、ReentrantLock原理
https://www.cnblogs.com/sunshine-ground-poems/p/10340147.html
https://blog.csdn.net/qq_20597727/article/details/86263237
五、原子類
1、基本數據類型
2、原子更新數組
3、原子更新引用類型
4、原子更新字段
六、併發工具類
1、CountdownLatch的作用和工作原理 (直接基於AQS實現)
https://cloud.tencent.com/developer/article/1038486
2、CycileBarrier的作用和工作原理 (基於ReentrantLock+Condition實現)
https://www.cnblogs.com/200911/p/6060195.html
3、Semaphore信號量的作用和工作原理 (直接基於AQS實現)
https://www.cnblogs.com/sunshine-ground-poems/p/10398475.html
4、Exchange
七、線程池工作原理
1、線程池工作原理(組成參數)
https://www.cnblogs.com/captainad/p/10943091.html
2、線程池源碼分析
https://blog.csdn.net/mayongzhan_csdn/article/details/80790966
https://blog.csdn.net/programmer_at/article/details/79799267
八、java併發編程實戰
1、生產者與消費者的實現
https://juejin.im/entry/596343686fb9a06bbd6f888c
2、創建多少線程合適
https://mp.weixin.qq.com/s/TTxKi2_x2vyH6EiqgSLoIg
3、面試題
https://thinkwon.blog.csdn.net/article/details/104863992
方誌朋
https://mp.weixin.qq.com/s/VQFnvA345cRqOzKPpXR21A
4、高併發限流