sleep() 方法的作用是在指定的毫秒數內讓當前“正在執行的線程”休眠(暫停執行)。這個“正在執行的線程”是指 this.currentThread() 返回的線程。
例 1
下面通過一個案例來理解使用 sleep() 方法判斷線程是否活動的標准。假設 MyThread10 線程類的代碼如下:
package ch14; public class MyThread10 extends Thread { @Override public void run() { try { System.out.println("正在運行的線程名稱:"+this.currentThread().getName()+" 開始"); Thread.sleep(2000); //延時2秒 System.out.println("正在運行的線程名稱:"+this.currentThread().getName()+" 結束"); } catch(InterruptedException e) { e.printStackTrace(); } } } 下面編寫啟動 MyThread10 線程的代碼,具體實現如下: package ch14; public class Test14 { public static void main(String[] args) { MyThread11 mythread=new MyThread11(); System.out.println("主線程開始時間="+System.currentTimeMillis()); mythread.start(); System.out.println("主線程結束時間="+System.currentTimeMillis()); } }
如上述代碼所示,主線程創建一個 MyThread10 線程實例之后直接調用 run() 方法啟動線程,整個過程都在主線程中完成。程序運行后的輸出結果如下所示。
主線程開始時間=1540963362783 主線程結束時間=1540963362783 正在運行的線程名稱:Thread-0 開始 正在運行的線程名稱:Thread-0 結束
例 2
上個案例子線程中的延時導致主線程也進行了延時。下面再看一個 sleep() 方法應用的案例,這里使用的是 MyThread11 線程類,該類代碼如下:
package ch14; public class MyThread11 extends Thread { @Override public void run() { try { System.out.println("正在運行的線程名稱:"+this.currentThread().getName()+" 開始時間="+System.currentTimeMillis()); Thread.sleep(2000); //延時2秒 System.out.println("正在運行的線程名稱:"+this.currentThread().getName()+" 結束時間="+System.currentTimeMillis()); } catch(InterruptedException e) { e.printStackTrace(); } } }
下面編寫主線程的代碼,在這里使用 start() 方法來啟動 MyThread11 線程。具體代碼如下:
package ch14; public class Test14 { public static void main(String[] args) { MyThread11 mythread=new MyThread11(); System.out.println("主線程開始時間="+System.currentTimeMillis()); mythread.start(); System.out.println("主線程結束時間="+System.currentTimeMillis()); } }
此時運行程序將看到如下所示運行效果。
主線程開始時間=1540964257366 主線程結束時間=1540964257366 正在運行的線程名稱:Thread-0 開始時間=1540964257366 正在運行的線程名稱:Thread-0 結束時間=1540964259366