91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java-synchronized 嵌套使用代碼詳解

發布時間:2020-10-26 02:13:55 來源:腳本之家 閱讀:311 作者:yokasou 欄目:編程語言

當synchronized使用過多時,可能會造成死鎖,那么死鎖到底是怎么一回事呢。先看下面的代碼,實現死鎖

//死鎖的實現
classA
{
publicvoidget(){
System.out.println("A說:我開始啟動了,B,給我你的資源");
}
publicvoidsay(){
System.out.println("A獲得資源");
}
}
classB
{
publicvoidget(){
System.out.println("B說:我開始啟動了,A,給我你的資源");
}
publicvoidsay(){
System.out.println("B獲得資源");
}
}
classMyThreadimplementsRunnable
{
publicstaticAa=newA();
publicstaticBb=newB();
publicbooleanflag=false;
publicvoidrun(){
if(flag){
synchronized(a){
a.get();
try{
Thread.sleep(500);
}catch(InterruptedExceptione){}
synchronized(b){ //此同步代碼塊在另一同步代碼塊里
a.say();
}
}
}else{
synchronized(b){
b.get();
try{
Thread.sleep(500);
}catch(InterruptedExceptione){}
synchronized(a){ //此同步代碼塊在另一同步代碼塊里
b.say();
}
}
}
}
}
publicclassDemo24
{
publicstaticvoidmain(Stringargs[]){
MyThreadmt1=newMyThread();
MyThreadmt2=newMyThread();
mt1.flag=true;
mt2.flag=false;
Threadth2=newThread(mt1);
Threadth3=newThread(mt2);
th2.start();
th3.start();
}
}

以上代碼由于 synchronized 的同步造成了死鎖,死鎖是兩個或多個線程同時等待對方的完成,而程序無法繼續執行。在解釋代碼前,首先要明白synchronized到底是怎么一回事。synchronized 定義同步,那么同步的什么,什么和什么同步了?

首先,我們得知道,什么是。在java中,每一個對象都有一個內部鎖,如果以方法或代碼塊用 synchronized 進行聲明,那么對象的鎖將保護整個方法或代碼塊,要調用這個方法或者執行這個代碼塊,必須獲得這個對象的。而且,任何時候都只能有一個線程對象執行被保護的代碼

在以上代碼中,在線程th2啟動后,他就獲得了a的鎖,同時當其休眠完畢,求會申請獲得b的鎖,而此時,他的a鎖沒有放棄。在線程th3啟動后,他就獲得了b的鎖,同時當其休眠完畢,求會申請獲得a的鎖,而此時,他的b鎖沒有放棄。

兩方都握有自己的鎖不放棄,而同時申請另一方的鎖,所以,此時就造成了死鎖

同步,同步的就是線程和對象,將線程和對象進行綁定,獲取對象的鎖。

注意:通過以上代碼可以發現,死鎖的必要條件是不放棄已有的鎖,而同時申請新鎖。所以,要想實現死鎖,就會有synchronized的嵌套。

這樣才能同時操作兩個以上的鎖,從而造成死鎖

總結

以上就是本文關于java-synchronized 嵌套使用代碼詳解的全部內容,希望對大家有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普兰店市| 乾安县| 重庆市| 秀山| 贵州省| 天水市| 宜兰市| 金昌市| 平阴县| 宁河县| 台山市| 龙井市| 绥江县| 上思县| 卢龙县| 淳安县| 江陵县| 新丰县| 康乐县| 青河县| 姜堰市| 德清县| 翁牛特旗| 泰来县| 东方市| 苍溪县| 海南省| 襄樊市| 藁城市| 永寿县| 随州市| 成武县| 东丰县| 贺州市| 禹州市| 西丰县| 四川省| 南昌县| 罗甸县| 明光市| 永城市|