1

我是这里的初学者,开始学习java编程。

我写了一个程序来尝试线程。在一个类中,我编写了一个程序来显示从 1 到 100 的数字,在另一个类中显示从 999 到 100 的数字。现在,我主要为类(r1,r2))创建了一个对象引用并创建了一个线程对象并将它们作为参数传递(r1,r2-我的类的对象引用)。现在我得到的输出在某种程度上不像预期的那样我觉得我的第二个线程没有被执行。我不确定我的逻辑或程序是否有任何问题。任何帮助/建议将不胜感激。我的代码如下供参考。

第一类:

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 类:公共类 Run2 扩展 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. 你是线程的子类,所以你得到一个不做任何事情的 run 方法(实际上它检查它是否被传递到一个可运行的目标中,在这种情况下它调用目标上的 run,但由于目标是 null 它什么都不做),这就是正在运行的东西。

养成实现 Runnable 而不是扩展 Thread 的习惯,并使用 @Override 注释来捕捉你认为你正在覆盖某些东西但你没有覆盖的错误。

于 2013-04-11T18:50:58.470 回答
2

你的类 Run2 的方法应该命名为 run 而不是 run2。

于 2013-04-11T18:51:21.727 回答