synchronized是jvm實現的一種互斥同步訪問方式,底層是基於每個物件的監視器(monitor)來實現的。被synchronized修飾的**,在被編譯器編譯後在被修飾的**前後加上了一組位元組指令。
在**開始加入了monitorenter,在**後面加入了monitorexit,這兩個位元組碼指令配合完成了synchronized關鍵字修飾**的互斥訪問。
在虛擬機器執行到monitorenter指令的時候,會請求獲取物件的monitor鎖,基於monitor鎖又衍生出乙個鎖計數器的概念。
當執行monitorenter時,若物件未被鎖定時,或者當前執行緒已經擁有了此物件的monitor鎖,則鎖計數器+1,該執行緒獲取該物件鎖。
當執行monitorexit時,鎖計數器-1,當計數器為0時,此物件鎖就被釋放了。那麼其他阻塞的執行緒則可以請求獲取該monitor鎖。
面試題 synchronized與Lock的區別
synchronized是關鍵字,而lock是乙個介面。synchronized會自動釋放鎖,而lock必須手動釋放鎖。synchronized是不可中斷的,lock可以中斷也可以不中斷。通過lock可以知道執行緒有沒有拿到鎖,而synchronized不能。synchronized能鎖住方法和 塊...
Ansible概念 面試必知
ansible ansible常用模組 shell script,yum copy replace lineinfile,service,setup 1 playbook 作用 ansible 用於配置,部署,和管理託管主 機的劇本。通過 playbook 的詳細描述,執行其中的一系 列 tasks...
面試必問之 static
static常見用法三個,第乙個是和多檔案系統結合使用,決定是否可以被訪問。第二個是和變數初始化結合,乙個元素的初始化只能初始化一次,陣列初始化預設為0。1。多檔案結構中,static 對 variance fun的隱藏功能。static int i static void fun void fun...