2 回答

TA貢獻1780條經驗 獲得超4個贊
Java Thread sleep示例
這里是一個簡單的程序,它使用Thread.sleep()暫停主線程2分鐘。
[java] view plain copy
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毫秒,導致線程這樣執行的原因是操作系統具體實現和線程調度引起的。
Java線程休眠要點:
1.它總是暫停當前執行的線程
2.實際休眠的線程在喚醒開始執行前依賴于系統定時器和調度器,對于一個平穩的系統來住,線程實際執行的時間接近于指定線程休眠時間,但是對于一個忙碌的系統來說它將稍微超出一些。
3.當線程休眠時不會丟失已經獲得的監控和鎖。
4.任何線程都能中斷當前休眠的線程,將導致InterruptedException異常拋出。
線程休眠是如何工作的:
Thread.sleep()與線程調度器交互,在指定的時間內將當前線程作為等待狀態放入,一旦等待時間結束后,線程狀態變為可運行狀態,并等待CPU進一步執行。所以當前線程的實際休眠時間依賴于線程調度器和一部門操作系統。

TA貢獻1852條經驗 獲得超1個贊
Thread.sleep(0)方法將線程休眠,也就是線程進入阻塞階段,時間長短由方法傳入的參數(long類型)決定,你這個也就是0ms(1000ms=1秒);時間到了之后線程進入就緒階段,等待進程分配資源才能再次執行,休眠0ms可以用來切換線程用。但是注意:該方法不會釋放線程鎖。
添加回答
舉報