wait,sleep,yield區別和作用

2021-08-25 17:49:51 字數 581 閱讀 4956

網上看到的,覺得這個解釋的很明白了,而且本質也說出來了

另外,想搞清楚執行緒,cup時間片和鎖的概念一定要清楚,要不一定暈

wait是object類的方法,sleep與yield都是thread類的方法。wait呼叫的時候需要注意的是該方法是釋放鎖標誌的,而sleep在呼叫的時候是緊緊抱著鎖標誌的,也就是等他完全執行完成了才可以讓其他執行緒來訪問的

sleep 方法使當前執行中的執行緒睡眼一段時間,進入不可執行狀態,這段時間的長短是由程式設定的,yield 方法使當前執行緒讓出 cpu 佔有權,但讓出的時間是不可設定的。實際上,yield()方法對應了如下操作: 先檢測當前是否有相同優先順序的執行緒處於同可執行狀態,如有,則把 cpu 的佔有權交給此執行緒,否則,繼續執行原來的執行緒。所以yield()方法稱為「退讓」,它把執行機會讓給了同等優先順序的其他執行緒。

另外,sleep 方法允許較低優先順序的執行緒獲得執行機會,但 yield() 方法執行時,當前執行緒仍處在可執行狀態,所以,不可能讓出較低優先順序的執行緒些時獲得 cpu 佔有權。在乙個執行系統中,如果較高優先順序的執行緒沒有呼叫 sleep 方法,又沒有受到 i/o 阻塞,那麼,較低優先順序執行緒只能等待所有較高優先順序的執行緒執行結束,才有機會執行。

堆區 棧區 靜態區 常量區還有???

常見的儲存區域可分為 由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,程式會一直占用記憶體,導致記憶體洩漏...

c 棧區 堆區 常量區

c 中棧區 堆區 常量區 由一道面試題目而學習 2009 04 28 21 01 include void main 對應的彙編 10 a c 1 00401067 8a 4d f1 mov cl,byte ptr ebp 0fh 0040106a 88 4d fc mov byte ptr ebp...

記憶體的使用 棧區 堆區 靜態區 唯讀區

記憶體的使用感覺好亂啊,需要整理一下!於是參考c primer與網上資源,整理如下 一 綜述 記憶體中的棧區分配的是區域性變數和函式的引數值的空間,棧的生長方向是從高往低的 堆區是向上增長的用於分配程式設計師申請的記憶體空間 比如new 申請的動態記憶體 注意它與資料結構中的堆是兩回事,分配方式倒是...