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方法。

  • 當執行緒在其執行過程中暫停時,無法確保它很快或稍後會獲得機會,這完全取決於排程演算法和執行緒排程器。

更新於:2020年7月4日

566 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告