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

為了賬號安全,請及時綁定郵箱和手機立即綁定

sleep()

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

正在回答

4 回答

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

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


0 回復 有任何疑惑可以回復我~
#1

meersun

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

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

其實這個問題引出了一些很有用的點。

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

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)?{
				//?...
			}
		}
	}
}

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

第二個點,sleep()是static的,sleep()做的事情是將“當前sleep()所在”進程休眠

題主說的第十行附近的

Thread.sleep(3000);

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

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

然后15行的

thread.interrupt();

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


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

0 回復 有任何疑惑可以回復我~

sleep()方法只是使當前線程暫時進入休眠狀態(tài),并沒有阻斷當前線程的運行。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
深入淺出Java多線程
  • 參與學習       186071    人
  • 解答問題       498    個

帶你一起深入淺出多線程,掌握基礎,展望進階路線

進入課程
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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