java.lang.Thread的sleep()方法能使當前線程暫停運行一段時間(單位毫秒)。需要注意的是,sleep()方法的參數不能為負,否則會拋出IllegalArgumentException異常。
除此之外,還有另一個方法sleep(long millis, int nanos),該方法可用於使當前線程暫停millis毫秒nanos納秒。需要注意的是,參數nanos的取值范圍為[0, 999999]。
Java 8 中 HashMap 的性能提升 http://www.linuxidc.com/Linux/2014-04/100868.htm
Java 8 的 Nashorn 引擎 http://www.linuxidc.com/Linux/2014-03/98880.htm
Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm
下面的代碼演示如何用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來執行後續的任務。因此,當前線程的實際休眠時間取決於線程調度器,而線程調度器則是由操作系統來進行管理的。