天天看點

Synchronized 同步鎖

synchronized 它可以把任意一個非 NULL 的對象當作鎖。他屬于獨占式的悲觀鎖,同時屬于可重 入鎖。

Synchronized

作用範圍

  1. 作用于方法時,鎖住的是對象的執行個體(this); 2. 當作用于靜态方法時,鎖住的是Class執行個體,又因為Class的相關資料存儲在永久帶PermGen (jdk1.8 則是 metaspace),永久帶是全局共享的,是以靜态方法鎖相當于類的一個全局鎖, 會鎖所有調用該方法的線程; 3. synchronized 作用于一個對象執行個體時,鎖住的是所有以該對象為鎖的代碼塊。它有多個隊列, 當多個線程一起通路某個對象螢幕的時候,對象螢幕會将這些線程存儲在不同的容器中。
  2. Synchronized

    核心 元件

  1. Wait Set:哪些調用wait方法被阻塞的線程被放置在這裡; 2) Contention List:競争隊列,所有請求鎖的線程首先被放在這個競争隊列中; 3) Entry List:Contention List中那些有資格成為候選資源的線程被移動到Entry List中; 4) OnDeck:任意時刻,最多隻有一個線程正在競争鎖資源,該線程被成為OnDeck; 5) Owner:目前已經擷取到所資源的線程被稱為Owner; 6) !Owner:目前釋放鎖的線程。