真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java-synchronized嵌套使用代碼詳解

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

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站設(shè)計、做網(wǎng)站、網(wǎng)站頁面設(shè)計、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)站設(shè)計公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗,以探求精品塑造與理念升華,設(shè)計最適合用戶的網(wǎng)站頁面。 合作只是第一步,服務(wù)才是根本,我們始終堅持講誠信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場環(huán)境中,互促共生。

//死鎖的實現(xiàn)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 的同步造成了死鎖,死鎖是兩個或多個線程同時等待對方的完成,而程序無法繼續(xù)執(zhí)行。在解釋代碼前,首先要明白synchronized到底是怎么一回事。synchronized 定義同步,那么同步的什么,什么和什么同步了?

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

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

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

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

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

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

總結(jié)

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


名稱欄目:java-synchronized嵌套使用代碼詳解
網(wǎng)頁鏈接:http://weahome.cn/article/iesdjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部