多執行緒學習大綱
點選一級類目即可跳轉對應的連結
3.1.2. Notify(),notifyAll():喚醒同步鎖上處於等待狀態的執行緒 8
3.2.1. sleep():使當前執行緒休眠,但不釋放鎖 8
3.2.3. currentThread():獲得當前執行緒 8
T.interrupt():設定當前執行緒為可中斷執行緒。可中斷t.lockInterruptibly()方式加鎖並且處於等待獲取鎖狀態的執行緒。但對於執行中的執行緒不可中斷。 9
3.3.8.1. T.interrupt()和T.isInterrupted()協作來中斷執行緒 9
3.3.8.2. sleep,wait,join中的執行緒被設定為可中斷執行緒時丟擲異常 9
4.4.3. 其他阻塞:sleep() , join() , 發出了I/O請求 10
5.2.1. 讀-寫共享變數:while條件中的共享變數用於執行緒之間的通訊 12
5.2.2. 等待通知機制:通過wait() notify()機制喚醒對應的執行緒 12
5.3.1. 主記憶體和工作記憶體資料不一致:JMM模型導致的 12
5.4. 執行緒安全的處理方案:CAS,volative,synchronized,lock 12
6. java記憶體模型(JMM):共享記憶體的併發模型 12
7.6. 記憶體屏障(Memory Barrier ) 13
8. DCL double-check locks(指令重排序導致的非執行緒安全問題) 14
8.2. 單例模式2:synchronized修改方法塊 14
8.4. 最終版:單例模式4:volatile變數禁止指令重排序,讓DCL生效 14
9. Volatile-CAS-synchronized-lock對比 15
10.2. 使用注意事項:區分鎖物件(鎖不同沒有互斥作用) 16
10.4. synchronized的happens-before關係:先加鎖後釋放鎖 16
11. volatile:synchronized的輕量級實現 17
11.1. 作用:保證資料的可見性,以及確保變數不會被重排序 17
11.2.1. 和Synchronized結合,用於對變數n讀多寫少的情況 17
11.2.2. 和CAS結合保證操作的原子性,如AtomicInteger 17
13. AtomicInteger中CAS-volatile的應用 19
13.3. 核心方法compareAndSet(int expect, int update) 19
13.4. Get/set/getAndIncrement等方法 19
15.2. Object.wait()/notify() 21
15.3. LockSupport.park()/unpark() 22
15.4. lock.lock()/unlock() condition.await()/asignal() 22
16.1.1. final long parkBlockerOffset 執行緒中parkBlocker屬性的偏移量 22
16.1.3. unpark(t):呼叫unsafe的方法,喚醒執行緒t 23
16.1.4. park(Object blocker):阻塞當前執行緒到物件blocker 23
16.1.5. getBlocker/setBlocker: 設定執行緒的阻塞者物件 23
18.1. volatile Object parkBlocker 屬性 24
20.1. 鎖持有者管理器AbstractOwnableSynchronizer 26
20.2. 作用:在獨佔模式下,用於設定當前同步物件的佔用執行緒。 26
20.3. 為什麼需要將AQS持有鎖的執行緒的標識向上抽取 26
21.5.1. volatile int state 相關:unsafe使用CAS協議實現 27
21.5.2. transient volatile Node head; 28
21.5.3. transient volatile Node tail; 28
21.5.5. isHeldExclusively() 29
21.9. 頭節點,尾節點設定,waitStatus的更新 30
21.12. AQS.acquire----AQS.release流程運轉 32
23.3.1. 構造器new Semaphore(2, boolean fair); 34
24.4. ConcurrentHashMap 執行緒安全研究 37
26. java.util.concurrent.locks包分析 39
26.2.2. 發生異常時,如果沒有主動通過unLock()去釋放鎖,則很可能造成死鎖現象 39
26.5. ReentrantReadWriteLock案例分析 40
26.6. ReentrantLock 可重入的互斥鎖 41