Java sleep方法的作用(sleep())

2020-07-16 10:04:37
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 執行緒是隨後執行的,在最後兩行輸出它的執行時間資訊。