我是初学者,开始学习java编程。
我写了一个尝试线程的程序。在一个类中,我编写了一个程序来显示从1到100的数字,在另一个类中显示从999到100的数字。现在在主要的我已经为类(r1,r2)创建了一个对象引用并创建了一个线程的对象并传递(我的类的r1,r2-对象引用)它们作为参数。现在我得到的输出并不像预期的那样我觉得我的第二个线程没有被执行。我不确定我的逻辑或程序是否有任何问题。任何帮助/建议将不胜感激。我的代码可供参考。
第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类: 公共类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();
}
}
答案 0 :(得分:5)
将Run2的方法run2
重命名为run
。你是继承Thread的,所以你得到一个不做任何事情的run方法(实际上它检查它是否在目标runnable中传递,在这种情况下它调用在目标上运行,但由于目标是null它没有做什么),那就是正在运行的东西。
养成实现Runnable而不是扩展Thread的习惯,并使用@Override注释来捕捉错误,你认为你覆盖了某些东西,但你不是。
答案 1 :(得分:2)
您的类Run2的方法应该命名为run而不是run2。