亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

interrupt并不能中斷線程那它為啥叫interrupt啊

interrupt清楚阻塞狀態并拋出異常,這和中斷有啥關系?

正在回答

4 回答

3-3 Java線程停止廣為流傳的錯誤方法---interrupt方法

這節課老師講的初衷是interrupt方法不能正確地停止線程,是停止.interrupt方法本身就是中斷線程的意思.能中斷但不能停止線程.

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

你這個問題好問的笑死我了,那你咋不問stop的意思是停止,他為什么不能停止呢

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

是中斷不是終斷;

比如講師在本節課中的一個例子:

package?com.imooc.demo;

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)?{
			//?TODO?Auto-generated?catch?block
			e.printStackTrace();
		}
		System.out.println("Tnterrupting?thread");
		thread.interrupt();
		try?{
			Thread.sleep(3000);
		}?catch?(InterruptedException?e)?{
			//?TODO?Auto-generated?catch?block
			e.printStackTrace();
		}
		System.out.println("Stopping?thread");
	}
	@Override
	public?void?run()?{
//		在線程之中,我們定義了一個無限循環的while()結構,在while()循環之中,我輸出線程正在運行的信息
//		然后嵌套一個空的while()循環,減少屏幕輸出,使得每秒只輸出一行信息,它的作用大致相當于Thread.sleep(1000)
//		但是為什么不是Thread.sleep(1000)?
//		
		while?(!this.isInterrupted())?{
			System.out.println("Thread?is?running");
			long?time?=?System.currentTimeMillis();
			while?((System.currentTimeMillis()?-?time)?<?1000)?{
//			try?{
//				Thread.sleep(1000);
//			}?catch?(InterruptedException?e)?{
//				//?TODO?Auto-generated?catch?block
//				e.printStackTrace();
//			}	
			}
		}
	}
}

我們知道main也一個主線程,在執行到程序的入口,也就是main()方法的時候,程序就會產生一個線程,然后調用start()的時候會產生一個線程,這兩個線程并行,調用Thread.sleep(3000),指的是讓main這個主線程休眠3秒,我們的thread線程才搶占資源運行,隨著main線程3秒后的恢復,thread線程就恢復了搶占資源的狀態,然后main線程讀取到了thread.interrupt(),也就是說thread線程進行了終止,那么isInterrupted()的返回值就是true,所以while()循環會停止,也就是說,thread線程結束了,然后經過Thread.sleep(),主線程就又停止了3秒,然后輸出線程停止。

一家之言,敬請指正!

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

官方就是這么叫的。。。咱們也沒辦法啊

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

舉報

0/150
提交
取消

interrupt并不能中斷線程那它為啥叫interrupt啊

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號