java多執行緒->java中yield()方法使用
阿新 • • 發佈:2019-01-10
Thread.yield()方法作用是:暫停當前正在執行的執行緒物件,並執行其他執行緒。
yield()應該做的是讓當前執行執行緒回到可執行狀態,以允許具有相同優先順序的其他執行緒獲得執行機會。因此,使用yield()的目的是讓相同優先順序的執行緒之間能適當的輪轉執行。但是,實際中無法保證yield()達到讓步目的,因為讓步的執行緒還有可能被執行緒排程程式再次選中。
結論:yield()從未導致執行緒轉到等待/睡眠/阻塞狀態。在大多數情況下,yield()將導致執行緒從執行狀態轉到可執行狀態,但有可能沒有效果。
public class TestYield { public static void main(String[] args) { MyThread3 t1 = new MyThread3("t1"); MyThread3 t2 = new MyThread3("t2"); t1.start(); t2.start(); } } class MyThread3 extends Thread { MyThread3(String s) { super(s); } public void run() { for(int i = 1;i <=100; i++) { System.out.println(getName() + ":"+i); if(i == 0) yield(); } } }
簡單總結:
這個方法的作用是將呼叫此方法的執行緒跟另一個執行緒合併,也就是說另一個執行緒將等待此執行緒執行完畢後再繼續執行。 這個方法是執行緒方法,當一個執行緒搶到執行權後,執行到yield()方法後,就會放棄執行權,其他執行緒就可以拿到執行權 了。