yieId() 方法的作用是放棄當前的 CPU 資源,將它讓給其他的任務去佔用 CPU 執行時間。但放棄的時間不確定,有可能剛剛放棄,馬上又獲得 CPU 時間片。
例 1
建立一個執行緒實現從 1 開始,共累加 5 千萬次,要求線上程中輸出開始運算時間、結束運算時間以及運算耗時時間。具體實現程式碼如下:
package ch14;
public class MyThread12 extends Thread
{
@Override
public void run()
{
long beginTime=System.currentTimeMillis();
System.out.println("執行緒開始執行時間:"+beginTime);
int count=0;
for (int i=0;i<50000000;i++)
{
//Thread.yield(); //呼叫yield()方法,暫時不用
count=count+(i+1);
}
long endTime=System.currentTimeMillis();
System.out.println("執行緒結束執行時間:"+endTime);
System.out.println("本次執行用時:"+(endTime-beginTime)+"毫秒!");
}
}
編寫主執行緒程式碼啟動上面的 MyThread12 執行緒,程式碼如下:
package ch14;
public class Test16
{
public static void main(String[] args)
{
MyThread12 thread=new MyThread12(); //建立MyThread12執行緒範例
thread.start(); //啟動執行緒
}
}
在 MyThread12 執行緒類中呼叫 yield() 方法的程式碼被註釋了,此時執行結果如下所示。
執行緒開始執行時間:1540965620705
執行緒結束執行時間:1540965620729
本次執行用時:24毫秒!
下面取消對呼叫 yieId() 方法的程式碼註釋,再次執行程式,此時執行結果如下所示。
執行緒開始執行時間:1540965685288
執行緒結束執行時間:1540965696100
本次執行用時:10812毫秒!
對比兩次執行結果可以看到,呼叫 yieId() 方法後,執行緒的執行時間明顯變長。