2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
Java Thread sleep示例
這里是一個(gè)簡單的程序,它使用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));
}
}
如果你將執(zhí)行上面的程序,你將注意到線程休眠打印時(shí)間略微大于2000毫秒,導(dǎo)致線程這樣執(zhí)行的原因是操作系統(tǒng)具體實(shí)現(xiàn)和線程調(diào)度引起的。
Java線程休眠要點(diǎn):
1.它總是暫停當(dāng)前執(zhí)行的線程
2.實(shí)際休眠的線程在喚醒開始執(zhí)行前依賴于系統(tǒng)定時(shí)器和調(diào)度器,對于一個(gè)平穩(wěn)的系統(tǒng)來住,線程實(shí)際執(zhí)行的時(shí)間接近于指定線程休眠時(shí)間,但是對于一個(gè)忙碌的系統(tǒng)來說它將稍微超出一些。
3.當(dāng)線程休眠時(shí)不會(huì)丟失已經(jīng)獲得的監(jiān)控和鎖。
4.任何線程都能中斷當(dāng)前休眠的線程,將導(dǎo)致InterruptedException異常拋出。
線程休眠是如何工作的:
Thread.sleep()與線程調(diào)度器交互,在指定的時(shí)間內(nèi)將當(dāng)前線程作為等待狀態(tài)放入,一旦等待時(shí)間結(jié)束后,線程狀態(tài)變?yōu)榭蛇\(yùn)行狀態(tài),并等待CPU進(jìn)一步執(zhí)行。所以當(dāng)前線程的實(shí)際休眠時(shí)間依賴于線程調(diào)度器和一部門操作系統(tǒng)。

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