ReentrantLock、AQS原始碼學習筆記
阿新 • • 發佈:2020-09-19
1. VarHandle
1.1 用途
使用VarHandle 取代 Unsafe
在 VarHandle 出現之前,這些潛在的問題會隨著原子API的不斷擴大而越來越遭。VarHandle 的出現替代了
java.util.concurrent.atomic
和sun.misc.Unsafe
的部分操作。並且提供了一系列標準的記憶體屏障操作,用於更加細粒度的控制記憶體排序。在安全性、可用性、效能上都要優於現有的API。VarHandle 可以與任何欄位、陣列元素或靜態變數關聯,支援在不同訪問模型下對這些型別變數的訪問,包括簡單的 read/write 訪問,volatile 型別的 read/write 訪問,和 CAS(compare-and-swap)等。
資料:
Java 9 變數控制代碼-VarHandlehttps://www.jianshu.com/p/e231042a52dd
1.2為什麼unsafe不安全
使用Unsafe幾乎可以操作一切:
(1)例項化一個類;
(2)修改私有欄位的值;
(3)丟擲checked異常;
(4)使用堆外記憶體;
(5)CAS操作;
(6)阻塞/喚醒執行緒;
資料:死磕 java魔法類之Unsafe解析 https://juejin.im/post/6844903838307057671 Java魔法類:Unsafe應用解析
synchronized
可以配合wait
和notify
實現執行緒在條件不滿足時等待,條件滿足時喚醒,用ReentrantLock
我們怎麼編寫wait
和notify
的功能呢?答案是使用
Condition
物件來實現wait
和notify
的功能。
s