私はUbuntu 10.04 x86_64でNetbeans 6.9.1を使用してJavaでスレッドを作成しています。このメソッドを呼び出すと、現在のスレッドは停止せずに実行を継続し、他のスレッドの実行を許可するため、yield()メソッドを使用して問題が発生します。Java yield()メソッドが機能しません。 Netbeans Ubuntu 10.04
以下のコードは、yieldを使用して2つのスレッドを実行する簡単な例です。最初のスレッドを実行し、1行を出力してからスレッドを停止するのではなく、メソッドyieldが呼び出されないので、プログラムはスレッド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(); } }
2番目のスレッドを開始すると、最初のスレッドがまだ終了していないことを確認できますか? – jarnbjo
"同時に"両方のスレッドをキックオフするために巡回バリアを使用したが、一貫した結果が期待できない場合、テストはいくらか正確です。シングルまたはデュアルコアアーキテクチャはおそらくインターリーブ動作を生成する可能性が高いですが。 –