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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

java線程問題,直接看代碼吧。不好描述。

java線程問題,直接看代碼吧。不好描述。

德瑪西亞99 2019-04-21 20:38:54
Foo類實(shí)現(xiàn)了Runnable接口publicclassFooimplementsRunnable{privatebooleanisRun;@Overridepublicvoidrun(){isRun=true;while(isRun){System.out.println("runing......");}}publicvoidstop(){this.isRun=false;}@OverridepublicStringtoString(){return"Foo{"+"isRun="+isRun+'}';}}測試類publicclassThreadTest{publicstaticvoidmain(String[]args){Foof=newFoo();Threadt=newThread(f);t.start();f.stop();System.out.print(f);}}為什么執(zhí)行了stop()方法之后,t線程沒有停止執(zhí)行呢。我debug發(fā)現(xiàn)thread在運(yùn)行start()方法之前,里面的Foo對象和執(zhí)行stop()方法的Foo對象是同一個(gè)。按理說執(zhí)行stop()方法后。f的isRun被設(shè)置成了false,線程讀取到該變量變成false應(yīng)該停止才對??磘hread的源碼求大神解答。
查看完整描述

2 回答

?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

t.start();并不是離開執(zhí)行run方法,而是交給OS去調(diào)度。
針對你這個(gè)例子,執(zhí)行的順序是f.stop()-->System.out.print(f)也及時(shí)調(diào)用f對象的toString,然后才開始線程執(zhí)行。而在你的run方法中又設(shè)置isRun=true;所以線程無法停止。
修改Foo如下:
publicclassFooimplementsRunnable{
privateintisRun=1;
@Override
publicvoidrun(){
System.out.println("isRunValue:"+isRun);
isRun=0;
while(isRun==0){
System.out.println("runing......");
try{
Thread.sleep(1000l);
}catch(Exceptione){
}
}
}
publicvoidstop(){
this.isRun=2;
}
@Override
publicStringtoString(){
return"Foo{"+"isRun="+isRun+"}\n";
}
}
這個(gè)時(shí)候你會(huì)看到類似這樣的輸出
Foo{isRun=2}
isRunValue:2
runing......
runing......
runing......
runing......
說明stop確實(shí)在run之前先執(zhí)行
                            
查看完整回答
反對 回復(fù) 2019-04-21
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

因?yàn)槟氵@是死循環(huán)
while(isRun){
System.out.println("runing......");
}
而且isRun一直是true,你應(yīng)該改成:
@Override
publicvoidrun(){
//isRun=true;
while(isRun){
System.out.println("runing......");
}
}
isRun一開始就初始化,應(yīng)該這么寫:
publicclassFooThreadimplementsRunnable{
privatebooleanisRun=true;
@Override
publicvoidrun(){
System.out.println("runbegin...");
//isRun=true;
while(isRun){
System.out.println("runing......");
}
}
publicvoidstop(){
System.out.println("callstop");
this.isRun=false;
}
@Override
publicStringtoString(){
return"Foo{"+
"isRun="+isRun+
'}';
}
publicstaticvoidmain(String[]args){
FooThreadf=newFooThread();
Threadt=newThread(f);
t.start();
try{
Thread.sleep(100);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
f.stop();
System.out.print(f);
}
}
最終輸出:
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
runing......
callstop
Foo{isRun=false}
                            
查看完整回答
反對 回復(fù) 2019-04-21
  • 2 回答
  • 0 關(guān)注
  • 321 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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