1. 程式人生 > 實用技巧 >ReentrantLock、AQS原始碼學習筆記

ReentrantLock、AQS原始碼學習筆記

1. VarHandle

  1.1 用途

    使用VarHandle 取代 Unsafe

    在 VarHandle 出現之前,這些潛在的問題會隨著原子API的不斷擴大而越來越遭。VarHandle 的出現替代了java.util.concurrent.atomicsun.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應用解析  
https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html
2. Condition   資料:     廖雪峰--使用Condition  https://www.liaoxuefeng.com/wiki/1252599548343744/1306581033549858   

  synchronized可以配合waitnotify實現執行緒在條件不滿足時等待,條件滿足時喚醒,用ReentrantLock我們怎麼編寫waitnotify的功能呢?

  答案是使用Condition物件來實現waitnotify的功能。

s