欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java-synchronized 嵌套使用代碼詳解

 更新時(shí)間:2017年09月19日 10:27:33   作者:yokasou  
本文以synchronized 的同步造成了死鎖為例,介紹了java-synchronized 嵌套使用代碼詳解,同時(shí)對(duì)鎖和死鎖的概念進(jìn)行了說(shuō)明,需要的朋友可以了解下。

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

//死鎖的實(shí)現(xiàn)
classA
{
publicvoidget(){
System.out.println("A說(shuō):我開(kāi)始啟動(dòng)了,B,給我你的資源");
}
publicvoidsay(){
System.out.println("A獲得資源");
}
}
classB
{
publicvoidget(){
System.out.println("B說(shuō):我開(kāi)始啟動(dòng)了,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;
Threadth1=newThread(mt1);
Threadth2=newThread(mt2);
th1.start();
th2.start();
}
}

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

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

在以上代碼中,在線程th1啟動(dòng)后,他就獲得了a的鎖,同時(shí)當(dāng)其休眠完畢,求會(huì)申請(qǐng)獲得b的鎖,而此時(shí),他的a鎖沒(méi)有放棄。在線程th2啟動(dòng)后,他就獲得了b的鎖,同時(shí)當(dāng)其休眠完畢,求會(huì)申請(qǐng)獲得a的鎖,而此時(shí),他的b鎖沒(méi)有放棄。

兩方都握有自己的鎖不放棄,而同時(shí)申請(qǐng)另一方的鎖,所以,此時(shí)就造成了死鎖。

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

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

這樣才能同時(shí)操作兩個(gè)以上的鎖,從而造成死鎖。

總結(jié)

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

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)接口校驗(yàn)簽名調(diào)用的項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)接口校驗(yàn)簽名調(diào)用的項(xiàng)目實(shí)踐

    在以SpringBoot開(kāi)發(fā)后臺(tái)API接口時(shí),會(huì)存在哪些接口不安全的因素呢?通常如何去解決的呢?本文主要介紹了SpringBoot實(shí)現(xiàn)接口校驗(yàn)簽名調(diào)用的項(xiàng)目實(shí)踐,感興趣的可以了解一下
    2023-09-09
  • 如何使用MAVEN打JAR包(直接使用)

    如何使用MAVEN打JAR包(直接使用)

    這篇文章主要介紹了如何使用MAVEN打JAR包(直接使用),文中通過(guò)實(shí)例代碼介紹了maven?使用assembly插件進(jìn)行打包的方法,需要的朋友可以參考下
    2023-03-03
  • java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 解決idea導(dǎo)入maven項(xiàng)目缺少jar包的問(wèn)題方法

    解決idea導(dǎo)入maven項(xiàng)目缺少jar包的問(wèn)題方法

    這篇文章主要介紹了解決idea導(dǎo)入maven項(xiàng)目缺少jar包的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 解決引用slf4j中Logger.info只打印出文字沒(méi)有數(shù)據(jù)的問(wèn)題

    解決引用slf4j中Logger.info只打印出文字沒(méi)有數(shù)據(jù)的問(wèn)題

    這篇文章主要介紹了解決引用slf4j中Logger.info只打印出文字沒(méi)有數(shù)據(jù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Maven 生成打包可執(zhí)行jar包的方法步驟

    Maven 生成打包可執(zhí)行jar包的方法步驟

    這篇文章主要介紹了Maven 生成打包可執(zhí)行jar包的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 關(guān)于IDEA關(guān)聯(lián)數(shù)據(jù)庫(kù)的問(wèn)題

    關(guān)于IDEA關(guān)聯(lián)數(shù)據(jù)庫(kù)的問(wèn)題

    這篇文章主要介紹了IDEA關(guān)聯(lián)數(shù)據(jù)庫(kù)的相關(guān)知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java數(shù)組與二維數(shù)組及替換空格實(shí)戰(zhàn)真題講解

    Java數(shù)組與二維數(shù)組及替換空格實(shí)戰(zhàn)真題講解

    數(shù)組對(duì)于每一門(mén)編程語(yǔ)言來(lái)說(shuō)都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語(yǔ)言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同。Java?語(yǔ)言中提供的數(shù)組是用來(lái)存儲(chǔ)固定大小的同類(lèi)型元素,這篇文章主要介紹了Java數(shù)組與二維數(shù)組及替換空格實(shí)戰(zhàn)真題講解
    2022-07-07
  • 詳解SpringCloud服務(wù)認(rèn)證(JWT)

    詳解SpringCloud服務(wù)認(rèn)證(JWT)

    本篇文章主要介紹了SpringCloud服務(wù)認(rèn)證(JWT),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解

    Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解

    這篇文章主要介紹了Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論