2010-11-23 6 views
2

私は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(); } }

+3

2番目のスレッドを開始すると、最初のスレッドがまだ終了していないことを確認できますか? – jarnbjo

+0

"同時に"両方のスレッドをキックオフするために巡回バリアを使用したが、一貫した結果が期待できない場合、テストはいくらか正確です。シングルまたはデュアルコアアーキテクチャはおそらくインターリーブ動作を生成する可能性が高いですが。 –

答えて

12

yield簡単にスケジュールするために別のスレッドの要求です。 JVMまたは基礎となるOSが同じスレッドを再度スケジューリングするのを妨げるものは何もありません。

1

のjavadocメソッドがJDK 6JDK 7で異なる場合は、使用しているJVMのバージョンについてjavadocをチェックする必要があります。

+1

+1の違いに気づいてください。このケースでは、追加のドキュメントは変更よりもはっきりしていると思います。 –

+0

JDK 6を使用しています。ありがとう – Victor

関連する問題