[譯]Java Thread Sleep示例


Java Thread Sleep示例

java.lang.Thread sleep(long millis)方法被用來暫停當前線程的執行,暫停時間由方法參數指定,單位為毫秒。注意參數不能為負數,否則程序將會拋出IllegalArgumentException。

還有另外一個sleep(long millis, int nanos)方法,功能與上面方法相同,只不過暫停時間為millis毫秒數加上nanos納秒數。納秒允許的取值范圍為0~999999.

下面的程序通過調用Thread.sleep()方法,使main線程的執行過程暫停了2秒鍾。

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));

    } 
}  

運行上面的程序,會看到實際輸出的sleep時間會比2000毫秒稍長一些,這個主要由線程的sleep工作機制以及操作系統具體的線程調度實現引起的。

Thread Sleep 要點

  • 它只用於暫停當前線程的執行。
  • 線程被喚醒(wake up)並開始執行的實際時間取決於操作系統的CPU時間片長度及調度策略。對於相對空閑的系統來說,sleep的實際時間與指定的sleep時間相近,但對於操作繁忙的系統,這個時間將會顯得略長一些。
  • 線程在sleep過程中不會釋放它已經獲得的任意的monitor和lock等資源。
  • 其他的任意線程都能中斷當前sleep的線程,並會拋出InterruptedException。

Thread sleep工作機制

Thread.sleep()會通知線程調度器把當前線程在指定的時間周期內置為wait狀態。當wait時間結束,線程狀態重新變為Runnable並等待CPU的再次調度執行。所以線程sleep的實際時間取決於線程調度器,而這是由操作系統來完成的。

原文鏈接:http://www.journaldev.com/1020/java-thread-sleep-example


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM