我在复杂的Java应用程序中遇到的问题归结为以下几点:主线程在子线程未完成之前不会继续,尽管我认为它应该。示例问题的代码如下所示:
public class ThreadTest {
static class MyThread extends Thread{
public void run(){
for(double i = 0; i<1; i+=0.01){
System.out.println(Math.pow(Math.PI,Math.E)*100.0*i-234.0);
}
}
}
public static void main(String[] args){
(new MyThread()).run();
System.out.println("main thread");
}
}
当我运行这个程序时,我总是首先从MyThread获取输出(独立循环中有多少步骤),然后我从主线程获取消息。创建线程的想法是异步执行代码,但在这里我观察到一个明确同步的行为。我错过了什么?
提前致谢!
答案 0 :(得分:12)
当你调用run()时,你正在调用当前线程中的run()方法!就像你为另一个对象调用任何其他方法一样。
如果你想要一个新线程来调用run(),你需要在线程上调用start()。
试
new MyThread().start();
向自己证明这一点的一种方法是在调试器中逐步执行程序,这将显示只有一个线程。