我正在使用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(); } }
當您啓動第二個線程時,什麼使得您確定第一個線程尚未完成? – jarnbjo 2010-11-24 00:10:37
如果您使用循環屏障「同時」啓動兩個線程,但您的測試可能會更精確一些,但我仍然不會期望得到一致的結果。儘管單核或雙核架構可能更有可能產生交錯行爲。 – 2010-11-24 02:50:55