第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

同一個(gè)方法中的被synchronized包裹的代碼塊與普通代碼塊

public?class?SynchronizedCodeblock?implements?Runnable{
static?SynchronizedCodeblock?instance1?=?new?SynchronizedCodeblock();
//static?SynchronizedCodeblock?instance2?=?new?SynchronizedCodeblock();
static?int?i?=?0;
public?static?void?main(String[]?args)?{
Thread?t1?=?new?Thread(instance1);
Thread?t2?=?new?Thread(instance1);
t1.start();
t2.start();
while(t1.isAlive()?||?t2.isAlive()?)?{}
System.err.println(i);
System.err.println("finished!");
}
public?void?run()?{
method();
}
public?void?method()?{
//synchronized(SynchronizedCodeblock.class)?{
synchronized(this)?{
System.err.println("我是同步塊內(nèi)代碼,我叫:"+Thread.currentThread().getName());
for?(int?j?=?0;?j?<?10000;?j++)
????????{
System.err.println(Thread.currentThread().getName()?+":?"?+?i++);
????????}
System.err.println("同步塊內(nèi)代碼運(yùn)行結(jié)束,我叫:"+Thread.currentThread().getName());
}
System.err.println("我是同步塊外代碼,我叫:"+Thread.currentThread().getName());
for?(int?j?=?0;?j?<?100000;?j++)
????????{
System.err.println(Thread.currentThread().getName()?+":?"?+?i++);
????????}
System.err.println("同步塊外代碼運(yùn)行結(jié)束,我叫:"+Thread.currentThread().getName());
}
}


結(jié)果:

。。。

Thread-1: 219984

Thread-1: 219985

Thread-1: 219986

同步塊外代碼運(yùn)行結(jié)束,我叫:Thread-1

219987

finished!


我不太明白,當(dāng)某個(gè)線程執(zhí)行到ssynchronized代碼塊發(fā)現(xiàn)拿不到鎖時(shí),該線程會(huì)跳過(guò)這端代碼,然后執(zhí)行下面的代碼嗎,如果是這樣,我就不理解了,這兩塊代碼都在一個(gè)線程,為什么不會(huì)順序執(zhí)行呢,jvm做了什么,迷惑,求教?


正在回答

2 回答

每個(gè)對(duì)象都有一個(gè)請(qǐng)求頭,請(qǐng)求頭里面不僅有當(dāng)前鎖被哪個(gè)線程獲取的狀態(tài)標(biāo)識(shí),也有鎖的類型,是輕量級(jí),重量,可偏向,等有阻塞隊(duì)列, 這就像是juc包里面aqs的實(shí)現(xiàn)用chl。 就是說(shuō),兩個(gè)線程獲取一把鎖,一個(gè)線程拿到了,另一個(gè)線程的狀態(tài)就會(huì)變成block阻塞,阻塞了就不受cpu機(jī)制的控制了,只有等拿到鎖的線程釋放了鎖,這個(gè)block的線程才會(huì)變成就緒狀態(tài),等待cpu分配,去競(jìng)爭(zhēng)這個(gè)鎖。

0 回復(fù) 有任何疑惑可以回復(fù)我~

我對(duì)jvm不太了解,但用Linux中的給你解釋下。
當(dāng)一個(gè)線程想去獲取一把鎖而獲取不到時(shí),是處在一個(gè)死循環(huán)狀態(tài)。

while( 沒(méi)有得到鎖)
{
???? 嘗試獲取鎖;
}

所以就相當(dāng)于死在了這個(gè)循環(huán)里面。

當(dāng)然還有嘗試鎖,先嘗試獲取,沒(méi)獲取到就退出,而不是死在循環(huán)中。

鎖的內(nèi)容還有很多,慢慢學(xué)吧。

1 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

同一個(gè)方法中的被synchronized包裹的代碼塊與普通代碼塊

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)