在JUC包中AbstractQueuedSynchronizer經常被稱作隊列同步器(AQS),是JUC包內鎖的實現關鍵,那要實現一個可重入鎖需要幾個核心要素
- 需要一個記錄鎖狀態的變量state,state至少需要兩個值0、1,對state操作要保證安全性,需要使用到CAS(自旋)
- 需要有一個變量保存當前是那個線程持有鎖
- 需要一個列表存儲當前等待鎖的線程的列表
- 需要有一個可以喚醒和阻塞線程的操作
那對標AQS
- 記錄鎖的狀態
- 保存當前是那個線程持有的鎖,在AQS父類AbstractOwnableSynchronizer中
- 存儲當前等待的線程列表
- 喚醒和堵塞線程的操作
使用的是LockSupport工具類中的lock、pack方法