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