sleep(100L)與wait(100L)的區別


sleep是線程被調用時,占着cpu去睡覺,其他線程不能占用cpu,os認為該線程正在工作,不會讓出系統資源,
wait是進入等待池等待,讓出系統資源,其他線程可以占用cpu,一般wait不會加時間限制,
因為如果wait的線程運行資源不夠,再出來也沒用,

要等待其他線程調用notifyall方法喚醒等待池中的所有線程,才會在進入就緒序列等待os分配系統資源, sleep是靜態方法,是誰調用的誰去睡覺,就算是在main線程里調用了線程b的sleep方法,實際上還是main去睡覺,
想讓線程b去睡覺要在b的代碼中掉sleep sleep(100L)是占用cpu,線程休眠100毫秒,其他進程不能再占用cpu資源,wait(100L)是進入等待池中等待,
交出cpu等系統資源供其他進程使用,

在這100毫秒中,該線程可以被其他線程notify,但不同的是其他在等待池中的線程不被notify不會出來,
但這個線程在等待100毫秒后會自動進入就緒隊列等待系統分配資源,

換句話說,sleep(100)在100毫秒后肯定會運行,但wait在100毫秒后還有等待os調用分配資源,
所以wait100的停止運行時間是不確定的,但至少是100毫秒。
另外補充以下wait()函數的知識:
_CRTIMP void __cdecl wait(
unsigned int _Milliseconds
);

_CRTIMP void __cdecl wait(
unsigned int _Milliseconds
);

參數_Milliseconds
當前上下文應該暫停的毫秒數。如果 _Milliseconds 形參設置為值 0,那么表示當前上下文應在繼續之前執行其他可運行的上下文


免責聲明!

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



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