鎖什麼時候需要使用?概述:每個類建立的物件都對應一把鎖,如果是多個執行緒訪問不同物件的時候,其它執行緒不用等待鎖的釋放,因為它們是不同的鎖。
請看**。
public
class
test
}class
mythread
implements
runnable
//重寫run方法
public
void
run()}
class
account
public
double
getbalance()
public
void
drawmoney
(double money)
catch
(exception e)
} system.out.
println
(thread.
currentthread()
.getname()
+"取款成功"
+" 剩餘:"
+getbalance()
);}}
}
總結:每個物件對應一把鎖,只有有共同物件的執行緒才會等待鎖的釋放(這就是物件鎖)。
概述:類鎖和物件鎖不同,每個物件都有一把對應的鎖,而類鎖是乙個類只有一把鎖,類鎖和物件鎖的作用相同,也是使得執行緒同步執行,而非非同步執行。
類鎖會出現在**?
請看**。(這個例子是乙個多執行緒的面試題)
public
class
exam01
}class
mythread
extends
thread
public
void
run()if
(thread.
currentthread()
.getname()
.equals
("t2"))
}}class
myclass
catch
(interruptedexception e)
system.out.
println
("dosome over");
}public
synchronized
static
void
doother()
}
執行結果:需要等待執行緒t1的結束執行緒t2才可以執行。
總結:乙個類只有一把類鎖,當類鎖被占用的時候,只要是需要佔鎖執行的執行緒就必須等待類鎖的釋放才可以執行。
有用就好評,喜歡就點讚,持續關注,精彩不斷!
多執行緒的物件鎖和類鎖
今天面試官問了乙個問題,如果在乙個類中的普通方法加上synchronized 關鍵字,兩個執行緒可以同步方法這個方法嗎?為什麼 當時回答是不可以同步,然後面試官確認我說一定嗎?當時就知道回答錯了。現在實現了下,原來是類鎖和物件鎖的區別所在,也算是普及了下相關知識吧。類鎖 就是在方法前面加上 stat...
Java多執行緒 類鎖和物件鎖
我們設想某個執行緒獨佔某個類,必須執行完才能再次建立物件 預期輸出以下結果 物件鎖示例 關鍵字synchronized取得的鎖都是物件鎖,而不是把一段 方法 當做鎖,所以 中哪個執行緒先執行synchronized關鍵字的方法,哪個執行緒就持有該方法所屬物件的鎖 lock 在靜態方法上加synchr...
多執行緒 互斥物件和鎖
互斥物件的主要操作有兩個,即加鎖 lock 和解鎖 unlock 當乙個執行緒對互斥物件進行lock操作並成功獲得這個互斥物件的所有權,在此執行緒對此物件unlock前,其他執行緒對這個互斥物件的lock操作都會被阻塞。有些傾向需要對多個互斥物件進行加鎖,考慮下面的 std mutex mt1,mt...