關於Thread.sleep的幾個問題


Thread.sleep
sleep就是正在執行的線程主動讓出CPU,CPU去執行其他線程,在sleep指定的時間過后,CPU才會回到這個線程上繼續往下執行,如果當前線程進入了同步鎖,sleep方法並不會釋放鎖,即使當前線程使用sleep方法讓出了CPU,但其他被同步鎖擋住了的線程也無法得到執行

幾個問題

  • Thread.sleep(1000),1000ms后是否立即執行?

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

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

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

  • java中sleep方法不會釋放鎖,但是又說sleep會把執行權讓給其他線程,這不是前后矛盾嗎?沒釋放鎖其他線程就是拿到執行權不還是執行不了嗎

這個兩個操作並不矛盾,sleep不釋放鎖代表其他線程不會獲取到當前線程所持有的所有的鎖,但是如果有線程不依賴sleep線程所持有的鎖,則線程有機會獲得cpu的持行權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM