努力的意義,就是,在往後的日子裡,放眼望去全是自己喜歡的人事物!
歡迎提issue和Pull request。所有的文件都是自己親自碼的,如果覺得不錯,歡迎給star鼓勵支持:)
整個系列文章為Java並發專題,一是自己的興趣,二是,這部分在實際理解上很有難度,另外在面試過程中也是常被問到。所以在學習過程中,記錄了Java並發相關的基礎知識,一是自己對知識能夠建立體系,同時也希望有幸能對其他人有用。
關於Java並發專題:
(1)包含了並發的基礎知識,每個標題連結到一篇具體的文章;
(2)包含了秋招面試的問題,弄清楚了會讓你有所收穫(也祝大家都能找到心儀的工作:) )
(3)在閱讀過程中,如果有所幫助,麻煩點贊,算是對我碼字的這份堅持的鼓勵。
註:轉載請標明原處,謝謝!
基礎知識
1.1 並發程式設計的優缺點
知識點:(1)為什麼要用到並發? (優點);(2)並發程式設計的缺點;(3)易混淆的概念
1.2 線程的狀態和基本操作
知識點:(1)如何新線程;(2)線程狀態的轉換;(3)線程的基本操作;(4)守護線程Daemon;
並發理論(JMM)
java記憶體模型以及happens-before規則
知識點:(1)JMM記憶體結構;(2)重新排序;(3)happens-before規則
並發關鍵字
3.1 讓你徹底理解Synchronized
知識點:(1)如何使用synchronized;(2)monitor機制;(3)synchronized的happens-before關係;(4)synchronized的記憶體語意;(5)鎖定最佳化;(6)鎖定升級策略
3.2 讓你徹底理解volatile
知識點:(1)實現原理;(2)happens-before的關係推導;(3)記憶體語意;(4)記憶體語意的實現
3.3 你以為你真的了解final嗎?
知識點:(1)如何使用;(2)final的重排序規則;(3)final實作原理;(4)final引用不能從建構函式中「溢出」(this逃逸)
3.4 三大性質總結:原子性,有序性,可見性
知識點:(1)原子性:synchronized;(2)可見度:synchronized,volatile;(3)有序性:synchronized,volatile
Lock體系
4.1 初識Lock與AbstractQueuedSynchronizer(AQS)
知識點:(1)Lock和synchronized的比較;(2)AQS設計意圖;(3)如何使用AQS實作自訂同步元件;(4)可重寫的方法;(5)AQS提供的模板方法;
4.2 深入理解AbstractQueuedSynchronizer(AQS)
知識點:(1)AQS同步佇列的資料結構;(2)獨佔式鎖;(3)共享式鎖;
4.3 再一次理解ReentrantLock
知識點:(1)重入鎖的實現原理;(2)公平鎖的實現原理;(3)非公平鎖的實現原則;(4)公平鎖與非公平鎖的比較
4.4 深入理解讀寫鎖ReentrantReadWriteLock
知識點:(1)如何表示讀寫狀態;(2)WriteLock的取得與釋放;(3)ReadLock的取得與釋放;(4)鎖定降級策略;(5)產生Condition等待佇列;(6)應用場景
4.5 詳解Condition的await和signal等待/通知機制
知識點:(1)與Object的wait/notify機制相比具有的特性;(2)與Object的wait/notify相對應的方法;(3)底層資料結構;(4)await實作原理;(5) signal/signalAll實作原則;(6)await和signal/signalAll的結合使用;
4.6 LockSupport工具
知識點:(1)主要功能;(2)與synchronized阻塞喚醒相比具有的特色;
並發容器
5.1 並發容器之ConcurrentHashMap(JDK 1.8版本)
知識點:(1)關鍵屬性;(2)重要內部類別;(3)涉及到的CAS操作;(4)構造方法;(5)put執行流程;(6)get執行流程;(7)擴容機制;(8)用於統計size的方法的執行流程;(9)1.8版本的ConcurrentHashMap與先前版本的比較
5.2 並發容器之CopyOnWriteArrayList
知識點:(1)實現原理;(2)COW和ReentrantReadWriteLock的差異;(3)應用場景;(4)為何具有弱一致性;(5)COW的缺點;
5.3 並發容器之ConcurrentLinkedQueue
知識點:(1)實作原理;(2)資料結構;(3)核心方法;(4)HOPS延遲更新的設計意圖
5.4 並發容器之ThreadLocal
知識點:(1)實作原理;(2)set方法原理;(3)get方法原理;(4)remove方法原理;(5)ThreadLocalMap
一篇文章,從原始碼深入詳解ThreadLocal記憶體洩漏問題
知識點:(1)ThreadLocal記憶體洩漏原理;(2)ThreadLocal的最佳實務;(3)應用場景
5.5 並發容器之BlockingQueue
知識點:(1)BlockingQueue的基本操作;(2)常用的BlockingQueue;
並發容器之ArrayBlockingQueue與LinkedBlockingQueue實作原理詳解
線程池(Executor系統)
6.1 執行緒池實作原理
知識點:(1)為什麼要用到執行緒池? (2)執行流程;(3)建構器各個參數的意義;(4)如何關閉執行緒池;(5)如何配置執行緒池;
6.2 線程池之ScheduledThreadPoolExecutor
知識點:(1)類別結構;(2)常用方法;(3)ScheduledFutureTask;(3)DelayedWorkQueue;
6.3 FutureTask基本操作總結
知識點:(1)FutureTask的幾個狀態;(2)get方法;(3)cancel方法;(4)應用場景;(5)實作Runnable介面
原子操作類
7.1 Java中atomic包中的原子操作類別總結
知識點:(1)實作原理;(2)原子更新基本型別;(3)原子更新陣列型別;(4)原子更新引用型別;(5)原子更新欄位類型
並行工具
8.1 大白話說java並發工具類別-CountDownLatch,CyclicBarrier
知識點:(1)倒數計時器CountDownLatch;(2)循環柵欄CyclicBarrier;(3)CountDownLatch與CyclicBarrier的比較
8.2 大白話說java並發工具類-Semaphore,Exchanger
知識點:(1)資源存取控制Semaphore;(2)資料交換Exchanger
並發實踐
9.1 一篇文章,讓你徹底弄清楚生產者--消費者問題
JAVA併發知識圖譜
可移動到新窗口,放大查看效果更好或查看原圖
知識圖譜原圖鏈接,如果有用,可克隆給自己使用