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
由於 main 執行緒與 MyThread11 執行緒是非同步執行的,所以首先輸出主執行緒的資訊。而 MyThread11 執行緒是隨後執行的,在最後兩行輸出它的執行時間資訊。