Lock是併發包中的基礎接口。
Lock接口的實現基本都是經過聚合了一個同步器的子類來完成線程訪問控制的。好比常見的ReentrantLock。安全
AbstractQueuedSynchronizer(簡稱AQS),是用來構建鎖或者其它同步組件的基礎框架。它使用了一個int成員變量表示同步狀態,經過內置的FIFO隊列來完成資源獲取線程的排隊工做。
同步器的主要使用方式是繼承,子類經過繼承同步器並實現它的抽象方法來管理同步狀態。在抽象方法的實現過程當中免不了要對同步狀態進行更改,這時就須要使用同步器提供的3個方法(getState(),setState(int newState)和compareAndSetState(int expect,int update))來進行操做,由於它們可以保證狀態的改變是安全的。併發
同步器是實現鎖的關鍵,在鎖的實現中聚合同步器,利用同步器實現鎖的語義。能夠這樣理解兩者的關係:鎖是面向使用者的,它定義了使用者與鎖交互的接口,隱藏了實現細節;同步器面向的是鎖的實現者,它簡化了鎖的是實現方式,屏蔽了同步狀態管理、線程的排隊、等待與喚醒等底層操做。鎖和同步器很好地隔離了使用者和實現者所需關注的領域。框架