深入理解Java中的Thread.sleep

Thread.sleep()方法能夠已毫秒爲時間單位暫停當前執行的線程,參數值爲毫秒不能爲負數,否則將拋出IllegalArgumentException異常。

Java線程休眠要點:

1.它總是暫停當前執行的線程

2.實際休眠的線程在喚醒開始執行前依賴於系統定時器和調度器,對於一個平穩的系統來住,線程實際執行的時間接近於指定線程休眠時間,但是對於一個忙碌的系統來說它將稍微超出一些。

3.當線程休眠時不會丟失已經獲得的監控和鎖。

4.任何線程都能中斷當前休眠的線程,將導致InterruptedException異常拋出。

Thread.sleep(1000),1000ms後是否立即執行?
不一定,在未來的1000毫秒內,線程不想再參與到CPU競爭。那麼1000毫秒過去之後,這時候也許另外一個線程正在使用CPU,那麼這時候操作系統是不會重新分配CPU的,直到那個線程掛起或結束;況且,即使這個時候恰巧輪到操作系統進行CPU 分配,那麼當前線程也不一定就是總優先級最高的那個,CPU還是可能被其他線程搶佔去。


Thread.sleep(0),是否有用?

休眠0ms,這樣的休眠有何意義?Thread.Sleep(0)的作用,就是“觸發操作系統立刻重新進行一次CPU競爭,重新計算優先級”。競爭的結果也許是當前線程仍然獲得CPU控制權,也許會換成別的線程獲得CPU控制權。這也是我們在大循環裏面經常會寫一句Thread.sleep(0) ,因爲這樣就給了其他線程獲得CPU控制權的權力,這樣界面就不會假死在那裏。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章