多執行緒 10 禮讓yield

2021-09-26 13:39:58 字數 1142 閱讀 7955

禮讓執行緒:讓當前正執行執行緒從執行狀態轉入就緒狀態,然後讓cpu重新排程,而不是進入阻塞狀態。這樣可以避免當前執行緒占用cpu過久,這個yield和sllep一樣的是,都是靜態方法。

案例

package com.cb.thread.day02;

/* * yield 禮讓執行緒,暫停執行緒,然後直接進入就緒狀態不是阻塞狀態

*/public class yielddemo01

}class myyield implements runnable

}

執行結果1:當cpu排程執行緒a進入執行狀態執行run方法先列印a->start,禮讓進入就緒狀態等待cpu 排程,然後cpu排程執行緒b進入執行狀態執行run方法列印b–>start,禮讓進入就緒狀態等待cpu 排程,然後cpu排程執行緒a接著列印a–>end

,接著a進入死亡狀態,然後cpu排程執行緒b接著列印b–>end,b也進入死亡狀態。

執行結果2:當cpu排程執行緒a進入執行狀態執行run方法先列印a->start,禮讓進入就緒狀態等待cpu 排程,然後cpu排程執行緒b進入執行狀態執行run方法列印b–>start,禮讓進入就緒狀態等待cpu 排程,然後cpu還是排程執行緒b接著列印b–>end,接著b進入死亡狀態,然後cpu排程執行緒b接著列印a–>end,a也進入死亡狀態。

執行結果3:當cpu排程執行緒a進入執行狀態執行run方法先列印a->start,禮讓進入就緒狀態等待cpu 排程,然後cpu還是排程執行緒a接著列印a–>end,接著a進入死亡狀態,然後cpu還是排程執行緒b接著列印b–>start,然後沒有執行緒了,cpu排程執行緒b接著列印b–>end,b也進入死亡狀態。

從上面的三個結果中可以得出,不一定每次都會禮讓成功,而讓執行緒從執行狀態進入就緒狀態,然後在公平競爭。

yield禮讓執行緒和join

package cn.mb.thread public class yielddemo class myyield implements runnablepackage cn.mb.thread public class blockjoin class father extends thread c...

多執行緒 方法 yield

這邊補充說明方法yield yield 方法的作用是放棄當前的cpu資源,將它讓給其他的任務去占用cpu執行時間。但放棄的時間不確定,有可能剛剛放棄,馬上獲得cpu時間片。時間片即cpu分配給各個程式的時間,每個執行緒被分配乙個時間段,稱作它的時間片,即該程序允許執行的時間,使各個程式從表面上看是同...

java多執行緒之(yield)

yield方法會讓當前執行緒交出cpu許可權,讓cpu去執行其他的執行緒。它跟sleep方法類似,同樣不會釋放鎖。但是yield不能控制具體的交出cpu的時間,另外,yield方法只能讓擁有相同優先順序的執行緒有獲取cpu執行時間的機會。注意,呼叫yield方法並不會讓執行緒進入阻塞狀態,而是讓執行...