解析下interrupt()方法,對於老鳥來說,新手遇到這樣的問題簡直笑而不語,
估計你們上學的時候老師也說的不好,根本沒有具體的解析,我那個java老師就是這樣的,汗!------
具體解析請看代碼注釋。。。。。。。
/** * 停止線程的方法 * @author aa * */public class ThreadInterrupt { private volatile static boolean stop = false; /** * @param args * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { // 線程啟動 Thread01 ti1 = new Thread01() ; ti1.start() ; // Main線程睡1秒 Thread.sleep(1000) ; /** * 程式運行到這裡,ti線程已經啟動,而且ti線程正在阻塞狀態, * 屏蔽掉stop方法, * 調用interrupt()方法讓線程退出阻塞狀態,調用該方法線程將會拋出一個中斷異常, * InterruptedException,終結阻塞狀態之後,接著線程繼續運行 * 如下你將會看到“線程阻塞終結之後輸出”列印到控制台上 * * 總結:interrupt()是用來退出線程的阻塞狀態,如果線程不是阻塞狀態, * 調用該方法將不起任何作用,中文jdk說的是“中斷線程”,從字面上理解會給人誤導。(很懷疑是機器翻譯) * wait(),join(),sleep()都會讓線程阻塞 */ ti1.interrupt() ; System.out.println() ; // 線程啟動 /** * 正確停止線程的方法是設定共用變數,無論什麼情況,線程的退出都是檢查共用變數然後停止 * * 不考慮意外情況, * 這裡ti2線程start()後, * Mian線程休眠2.5秒過後並設定stop為true, * 此時ti2線程也就剛好是阻塞狀態, * 設定stop之後繼續執行interrupt()方法,終止阻塞, * 線程繼續運行,遇到stop==true,跳出while,線程停止 */ Thread02 ti2 = new Thread02() ; ti2.start() ; Thread.sleep(2500) ; stop = true ; ti2.interrupt() ; Thread.sleep(1000) ; } private static class Thread01 extends Thread { @Override public void run() { System.out.println("Thread01線程啟動") ; try { sleep(1000000) ; // 等待1000秒 } catch (InterruptedException e) { System.out.println("Thread01線程阻塞停止") ; } System.out.println("Thread01線程阻塞終結之後輸出") ; } } private static class Thread02 extends Thread { @Override public void run() { System.out.println("Thread02線程啟動") ; int i = 0 ; while(!stop) { System.out.println(i++) ; try { Thread.sleep(1000) ; } catch (InterruptedException e) { System.out.println("Thread02線程阻塞停止") ; } } } }}