1

私はここの初心者で、Java プログラミングを学び始めました。

スレッド化を試すプログラムを作成しました。あるクラスでは、1 から 100 までの数字を表示するプログラムを作成し、別のクラスでは 999 か​​ら 100 までの数字を表示するプログラムを作成しました。スレッドのオブジェクトと渡された(私のクラスのr1、r2オブジェクト参照)それらをパラメーターとして。今、私が得た出力は、何らかの方法で期待どおりではなく、2 番目のスレッドが実行されていないと感じています。私のロジックまたはプログラムに問題があるかどうかはわかりません。ヘルプ/アドバイスをいただければ幸いです。参照用に以下の私のコード。

クラス 1:

public class Run implements Runnable {

@Override
public void run() {

    for (int i = 0; i < 100; i++) {
        try {

            Thread.sleep(200);
        } catch (InterruptedException ex) {
            Logger.getLogger(Run.class.getName()).log(Level.SEVERE, "...", ex);
        }
        System.out.println(i);
    }
}
}

クラス 2: public class Run2 extends Thread {

public void run2() {

    for(int i=999;i>0;i--){
        try {

            Thread.sleep(500);
        } catch (InterruptedException ex) {
            Logger.getLogger(Run2.class.getName()).log(Level.SEVERE, "....", ex);
        }
        System.out.println(i);


    }

}
} 

メインクラス:

public class Threading {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    Run r= new Run();
    Thread t1=new Thread(r);
     t1.start();

    Run2 r2=new Run2();
    Thread t2=new Thread(r2);

    t2.start();


}

}
4

2 に答える 2

5

Run2 のメソッドの名前を に変更run2runます。Thread をサブクラス化しているため、何もしない run メソッドを取得します (実際には、ターゲットの runnable で渡されたかどうかを確認します。その場合、ターゲットで run を呼び出しますが、ターゲットが null であるため、何もしません)、そしてそれが実行されています。

Thread を拡張する代わりに Runnable を実装する習慣をつけ、@Override アノテーションを使用して、何かをオーバーライドしていると思っているのにそうではないという間違いを見つけます。

于 2013-04-11T18:50:58.470 に答える
2

クラス Run2 のメソッドは、run2 ではなく run という名前にする必要があります。

于 2013-04-11T18:51:21.727 に答える