java基礎:執行緒方法之interrupt和sleep

十五樓亮哥發表於2015-02-03

一:直接看demo

public class MyThread extends  Thread{

	@Override
	public void run() {
		boolean flag = true;
		while (flag) {
			System.out.println("-------"+new Date()+"----");
		    try {
				sleep(1000);
			} catch (InterruptedException e) {
				flag = false;
				//run方法一結束,執行緒終止
			}
		}
	}

}


public class TestInterrupt {
	public static void main(String[] args) {
		MyThread thread = new MyThread();
		thread.start();
		try {
			//Thread方法在哪個執行緒呼叫,就表示哪個執行緒。這裡是在mian主執行緒
			Thread.sleep(10000);
		} catch (InterruptedException e) {
		}
		//打斷thread執行緒
		thread.interrupt();
	}
}

輸出結果:
-------Tue Feb 03 19:57:02 CST 2015----
-------Tue Feb 03 19:57:03 CST 2015----
-------Tue Feb 03 19:57:04 CST 2015----
-------Tue Feb 03 19:57:05 CST 2015----
-------Tue Feb 03 19:57:06 CST 2015----
-------Tue Feb 03 19:57:07 CST 2015----
-------Tue Feb 03 19:57:08 CST 2015----
-------Tue Feb 03 19:57:09 CST 2015----
-------Tue Feb 03 19:57:10 CST 2015----
-------Tue Feb 03 19:57:11 CST 2015----

可以看出,10秒後,執行緒終止 ,thread.interrupt();表示打斷執行緒。

二:知識點
(1)Thread.sleep(10000);Thread方法在哪個執行緒呼叫,就表示哪個執行緒。這裡是在mian主執行緒
(2)sleep方法的底層實現:throws InterruptedException
    public static native void sleep(long millis) throws InterruptedException;
所以在呼叫sleep方法時,必須對其異常進行捕獲。
(3)interrupt()打斷終止執行緒,很粗暴!
(4)sleep()休眠一段時間,並不是終止!


相關文章