Java多線程-Thread.yield詳解

http://blog.csdn.net/dabing69221/article/details/17426953


Thread.yield( )方法:


使當前線程從執行狀態(運行狀態)變爲可執行態(就緒狀態)。cpu會從衆多的可執行態裏選擇,也就是說,當前也就是剛剛的那個線程還是有可能會被再次執行到的,並不是說一定會執行其他線程而該線程在下一次中不會執行到了。


Java線程中有一個Thread.yield( )方法,很多人翻譯成線程讓步。顧名思義,就是說當一個線程使用了這個方法之後,它就會把自己CPU執行的時間讓掉,讓自己或者其它的線程運行。


打個比方:現在有很多人在排隊上廁所,好不容易輪到這個人上廁所了,突然這個人說:“我要和大家來個競賽,看誰先搶到廁所!”,然後所有的人在同一起跑線衝向廁所,有可能是別人搶到了,也有可能他自己有搶到了。我們還知道線程有個優先級的問題,那麼手裏有優先權的這些人就一定能搶到廁所的位置嗎? 不一定的,他們只是概率上大些,也有可能沒特權的搶到了。


例子:

[java] view plain copy
 print?
  1. package com.yield;  
  2.   
  3. public class YieldTest extends Thread {  
  4.   
  5.     public YieldTest(String name) {  
  6.         super(name);  
  7.     }  
  8.   
  9.     @Override  
  10.     public void run() {  
  11.         for (int i = 1; i <= 50; i++) {  
  12.             System.out.println("" + this.getName() + "-----" + i);  
  13.             // 當i爲30時,該線程就會把CPU時間讓掉,讓其他或者自己的線程執行(也就是誰先搶到誰執行)  
  14.             if (i == 30) {  
  15.                 this.yield();  
  16.             }  
  17.         }  
  18.     }  
  19.   
  20.     public static void main(String[] args) {  
  21.         YieldTest yt1 = new YieldTest("張三");  
  22.         YieldTest yt2 = new YieldTest("李四");  
  23.         yt1.start();  
  24.         yt2.start();  
  25.     }  
  26. }  

運行結果:

第一種情況:李四(線程)當執行到30時會CPU時間讓掉,這時張三(線程)搶到CPU時間並執行。


第二種情況:李四(線程)當執行到30時會CPU時間讓掉,這時李四(線程)搶到CPU時間並執行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章