2010-11-23 49 views
2

我正在使用Netbeans 6.9.1在Ubuntu 10.04 x86_64上使用Java中的Threads。我在使用方法yield()時遇到了問題,因爲當我調用這個方法時,當前線程繼續運行而不是停止並讓其他線程執行。Java yield()方法不起作用。 Netbeans Ubuntu 10.04

下面的代碼是使用yield運行2個線程的簡單示例。由於未調用方法良率,因此不是運行第一個線程,而是打印一行然後停止線程,程序將完成線程1並運行thread2。我已經在Windows上測試了這個代碼,它完美的工作!所以我想知道是否有任何問題在Ubuntu或64位平臺上使用此方法。

有什麼想法?提前致謝。


//ThreadTest.java 
public class ThreadTest extends Thread{ 
    public ThreadTest (String name){ 
     super(name); 
    } 
    public void run(){ 
     for (int i=0;i<5;i++){ 
      System.out.println(getName()+" - "+i); 
      yield(); 
     } 
     System.out.println(" END "+getName()); 
    } 
}

//Main.java public class Main { public static void main(String[] args) { ThreadTest t1 =new ThreadTest("Thread1"); ThreadTest t2 =new ThreadTest("Thread2"); t1.start(); t2.start(); } }

+3

當您啓動第二個線程時,什麼使得您確定第一個線程尚未完成? – jarnbjo 2010-11-24 00:10:37

+0

如果您使用循環屏障「同時」啓動兩個線程,但您的測試可能會更精確一些,但我仍然不會期望得到一致的結果。儘管單核或雙核架構可能更有可能產生交錯行爲。 – 2010-11-24 02:50:55

回答

12

yield簡直是另一個線程的請求被調度。沒有什麼能夠阻止JVM或底層操作系統再次調度同一個線程。

1

在sun JDK 6JDK 7中用於yield()方法的javadoc不同,您可能需要檢查javadoc以查找您正在使用的JVM版本。