1.ReentrantLock.unlock()分析
(1)首先嘗試釋放鎖,如果要求釋放數(shù)等于鎖狀態(tài)數(shù),那么將鎖狀態(tài)位清0,清除鎖所有者,返回true;否則返回false;(2)如果(1)返回的是true,說明鎖完全釋放。接下來將檢查等待隊列,并選擇一個waitStatus處于等待狀態(tài)的節(jié)點下的線程unpark(恢復),選擇的依據(jù)是從尾節(jié)點開始,選取最靠近頭節(jié)點的等待節(jié)點,同時清理隊列中線程被取消的節(jié)點;(3)如果(1)返回false,說明鎖只是部分釋放,當前線程仍舊持有該鎖;