最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

sleep()

第10行的 sleep() 為什么不會(huì)使interrupt拋出異常

正在回答

4 回答

感覺聽視頻里講,不如來看評(píng)論,評(píng)論描述的還清楚些

0 回復(fù) 有任何疑惑可以回復(fù)我~
第10行的sleep,休眠的是main主線程,這樣thread線程可以獨(dú)占cpu運(yùn)行。主線程休眠了3秒,中間thread輸出了三條Thread?is?running,每秒一條。sleep結(jié)束后,主線程重新占用cpu,輸出interrupting?threading。。。主線程又休眠三秒,讓出cpu,但是interrupt沒有起作用(為什么?)thread?繼續(xù)每秒一條無限輸出


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

meersun

還是沒搞明白,坐等大俠來搭救
2016-04-26 回復(fù) 有任何疑惑可以回復(fù)我~

根據(jù)我知道的說一下我的理解,不保證一定正確,如有錯(cuò)誤歡迎指正。

其實(shí)這個(gè)問題引出了一些很有用的點(diǎn)。

先把視頻中的代碼貼出來,除了最后幾行,行數(shù)都是對(duì)應(yīng)的

package?base;

public?class?WrongWayStopThread?extends?Thread?{

	public?static?void?main(String[]?args)?{
		WrongWayStopThread?thread?=?new?WrongWayStopThread();
		System.out.println("Starting?Thread...");
		thread.start();
		try?{
			Thread.sleep(3000);
		}?catch?(InterruptedException?e)?{
			e.printStackTrace();
		}
		System.out.println("Interrupting?Thread...");
		thread.interrupt();
		try?{
			Thread.sleep(3000);
		}?catch?(InterruptedException?e)?{
			e.printStackTrace();
		}
		System.out.println("Stopping?Application...");
	}

	@Override
	public?void?run()?{
		while?(true)?{
			System.out.println("Thread?is?running");
			long?time?=?System.currentTimeMillis();
			while?(System.currentTimeMillis()?-?time?<?1000)?{
				//?...
			}
		}
	}
}

第一個(gè)點(diǎn),main本身也是一個(gè)線程,通常稱為主線程,這個(gè)程序一開始做的事情是,主線程創(chuàng)建了一個(gè)WrongWayStopThread實(shí)例,叫做thread,并start之,此時(shí)主進(jìn)程和thread同時(shí)運(yùn)行

第二個(gè)點(diǎn),sleep()是static的,sleep()做的事情是將“當(dāng)前sleep()所在”進(jìn)程休眠

題主說的第十行附近的

Thread.sleep(3000);

是對(duì)語(yǔ)句所在進(jìn)程,即主進(jìn)程進(jìn)行sleep。注意這里的Thread是大寫,代表的是調(diào)用Thread類的靜態(tài)方法sleep。

(注意即使改成小寫thread.sleep(3000),因?yàn)槭莝tatic方法,執(zhí)行的是的同樣操作,依舊是休眠主進(jìn)程,可以試驗(yàn)驗(yàn)證。換句話說,不管怎么寫sleep,一個(gè)線程只能對(duì)自己進(jìn)行自發(fā)的sleep,不能sleep別的進(jìn)程)

然后15行的

thread.interrupt();

注意interrupt不是static,任意進(jìn)程都可以對(duì)指定的另一個(gè)線程做interrupt,這里thread是小寫,指的是主線程對(duì)剛剛創(chuàng)建的WrongWayStopThread實(shí)例thread做interrupt。


總結(jié)就是,第十行左右的sleep的線程,和之后interrupt的線程,不是同一個(gè)線程,所以不會(huì)影響。但我認(rèn)為這其中的原理更重要。

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

sleep()方法只是使當(dāng)前線程暫時(shí)進(jìn)入休眠狀態(tài),并沒有阻斷當(dāng)前線程的運(yùn)行。

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

舉報(bào)

0/150
提交
取消
深入淺出Java多線程
  • 參與學(xué)習(xí)       186068    人
  • 解答問題       502    個(gè)

帶你一起深入淺出多線程,掌握基礎(chǔ),展望進(jìn)階路線

進(jìn)入課程
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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