在分佈式集羣系統的開發中,線程鎖每每並不能支持所有場景的使用,必須引入新的技術方案分佈式鎖。多線程
線程鎖:你們都不陌生,主要用來給方法、代碼塊加鎖。當某個方法或者代碼塊使用鎖時,那麼在同一時刻至多僅有有一個線程在執行該段代碼。當有多個線程訪問同一對象的加鎖方法/代碼塊時,同一時間只有一個線程在執行,其他線程必需要等待當前線程執行完以後才能執行該代碼段。可是,其他線程是能夠訪問該對象中的非加鎖代碼塊的。分佈式
進程鎖:也是爲了控制同一操做系統中多個進程訪問一個共享資源,只是由於程序的獨立性,各個進程是沒法控制其餘進程對資源的訪問的,可是可使用本地系統的信號量控制(操做系統基本知識)。post
分佈式鎖:當多個進程不在同一個系統之中時,使用分佈式鎖控制多個進程對資源的訪問。ui
分佈式鎖究竟是什麼,怎麼實現?spa
intsmaze說簡單點,實現分佈式鎖必需要依靠第三方存儲介質來存儲鎖的元數據等信息。好比分佈式集羣要操做某一行數據時,這個數據的流水號是惟一的,那麼咱們就把這個流水號做爲一把鎖的id,當某進程要操做該數據時,先去第三方存儲介質中看該鎖id是否存在,若是不存在,則將該鎖id寫入,而後執對該數據的操做;當其餘進程要訪問這個數據時,會先到第三方存儲介質中查看有沒有這個數據的鎖id,有的話就認爲這行數據目前已經有其餘進程在使用了,就會不斷地輪詢第三方存儲介質看其餘進程是否釋放掉該鎖;當進程操做完該數據後,該進程就到第三方存儲介質中把該鎖id刪除掉,這樣其餘輪詢的進程就能獲得對該鎖的控制。操作系統
說了這麼多,再補充一點,線程鎖,進程鎖,分佈式鎖的做用都是同樣的,只是做用的範圍大小不一樣。範圍大小:分佈式鎖 > 進程鎖 > 線程鎖。能用線程鎖,進程鎖狀況下使用分佈式鎖也是能夠的,能用線程鎖的狀況下使用進程鎖也是能夠的。只是範圍越大技術複雜度就越大。線程