1. 程式人生 > >Java執行緒休眠(sleep)示例

Java執行緒休眠(sleep)示例

    java.lang.Threadsleep()方法能使當前執行緒暫停執行一段時間(單位毫秒)。需要注意的是,sleep()方法的引數不能為負,否則會丟擲IllegalArgumentException異常。

    除此之外,還有另一個方法sleep(long millis, int nanos),該方法可用於使當前執行緒暫停millis毫秒nanos納秒。需要注意的是,引數nanos的取值範圍為[0, 999999]。

    下面的程式碼演示如何用Thread.sleep()方法令主執行緒暫停執行2秒。

    ThreadSleep.java

package com.journaldev.threads;

public class ThreadSleep {
    public static void main(String[] args) throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        System.out.println("Sleep time in ms = " + (System.currentTimeMillis()-start));
    }
}
    如果你執行上述程式,你會發現最後打印出來的結果會比2000略多一些,這取決於執行緒休眠是如何實現的,以及作業系統定義的執行緒排程機制。

執行緒休眠要點

1. 執行緒休眠總是暫停當前執行緒

2. 在被喚醒並開始執行前,執行緒休眠的實際時間取決於系統計時器和排程器。對比較清閒的系統來說,實際休眠的時間十分接近於指定的休眠時間,但對於繁忙的系統,兩者之間的差距就較大。

3. 執行緒休眠並不會丟失當前執行緒已獲取的任何監視器和鎖。

4. 其他執行緒可以中斷當前程序的休眠,但會丟擲InterruptedException異常。

執行緒休眠的工作原理

    Thread.sleep()與執行緒排程器互動,它將當前執行緒設定為等待一段時間的狀態。一旦等待時間結束,執行緒狀態就會被改為可執行(runnable),並開始等待CPU來執行後續的任務。因此,當前執行緒的實際休眠時間取決於執行緒排程器,而執行緒排程器則是由作業系統來進行管理的。