Java併發——yield()方法
yield函式
該函式試圖確保更重要的執行緒優先執行,而不是那些執行時間過長且不重要的執行緒。
當執行緒呼叫java.lang.Thread.yield方法時,這是向執行緒排程器發出暫停其執行的指示。執行緒排程器可以選擇接受或忽略此指示。
如果執行緒執行“yield”函式,排程器會檢查是否存在相同或更高優先順序的執行緒。如果存在,則當前執行緒將移至可執行或就緒狀態,並向該執行緒分配處理器資源。
yield函式語法 −
public static native void yield()
讓我們來看一個例子 −
示例
import java.lang.*; class Demo extends Thread{ public void run(){ for (int i=0; i<3 ; i++) System.out.println("In control of " + Thread.currentThread().getName() + " thread"); } } public class Demo_one{ public static void main(String[]args){ Demo my_obj = new Demo(); my_obj.start(); for (int i=0; i<3; i++){ Thread.yield(); System.out.println("In control of " + Thread.currentThread().getName() + " thread"); } } }
輸出
In control of main thread In control of main thread In control of main thread In control of Thread-0 thread In control of Thread-0 thread In control of Thread-0 thread
名為Demo的類擴充套件了Thread類。這裡,定義了一個“run”函式,它迭代一組元素並使用“getName”函式獲取執行緒的名稱。名為“Demo_one”的類定義了main函式,其中建立了一個新例項,並使用“start”函式啟動它。這裡也迭代元素,並在執行緒上呼叫yield函式。
一旦執行緒使用yield方法完成執行,許多執行緒就會爭奪處理器資源。無法指定哪個執行緒會首先執行。
一旦執行緒執行yield方法,它就會從執行狀態變為可執行狀態。
只有在平臺支援搶佔式排程的情況下才能使用yield方法。
當執行緒在其執行過程中暫停時,無法確保它很快或稍後會獲得機會,這完全取決於排程演算法和執行緒排程器。
廣告