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方法。
當執行緒在其執行過程中暫停時,無法確保它很快或稍後會獲得機會,這完全取決於排程演算法和執行緒排程器。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP