-3

これをEclipseで実行できません。特に理由はありますか?実行オプションを有効にする前に、Eclipse は特定のものを探しますか? 以下のコードを実行すると、結果はどうなりますか? 「1」ですか?

class A extends Thread {
    private int i;
    public void run(){i=1;}
    public static void main(String[] args) {
        A a = new A(); a.run();System.out.println(a.i);
    }
}

編集:継承とスレッドで遊んでいます。ここでは、特定のスレッド機能はテストされていません。

4

2 に答える 2

2

クラスをパブリックに設定するだけです

public class A extends Thread {
    private int i;
    public void run(){i=1;}
    public static void main(String[] args) {
        A a = new A(); a.run();System.out.println(a.i);
    }
}
于 2013-04-01T13:41:36.913 に答える
1

@Hussainはあなたのクラスを公開することについて正しいですが、後世のためにいくつかの追加情報を追加すると思いました.

  • コードが現在の状態であるため、別のスレッドでコードを実行していません。extends Threadコードからを削除しても問題なく動作します。メソッドを直接main呼び出しているだけで、スレッド マジックは呼び出していません。run()

  • コードを別のスレッドで実行したい場合はa.start();、スレッドの実行を開始し、a.join();終了するまで待機するように追加する必要があります。メソッドではstart()、スレッドがフォークされ、run()メソッドが呼び出されます。

    A a = new A();
    // start the thread which calls run()
    a.start();
    // wait for the thread to finish
    a.join();
    System.out.println(a.i);
    
  • 最後に、 とはimplements Runnable対照的に行うことをお勧めしますextends Thread。したがって、コードは次のようになります。

    A a = new A();
    Thread thread = new Thread(a);
    // start the thread which calls run()
    thread.start();
    // wait for the thread to finish
    thread.join();
    System.out.println(a.i);
    
  • これまでに行ったことがない場合は、スレッドに関するチュートリアルを読むことをお勧めします。

于 2013-04-01T13:52:39.663 に答える