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