我在一个复杂的 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 获得输出(独立于循环中有多少步),然后我从主线程获得消息。创建线程的想法是异步执行代码,但在这里我观察到明显的同步行为。我想念什么?
提前致谢!
最佳答案
当你调用 run() 时,你是在调用当前线程中的 run() 方法!就像您为另一个对象调用任何其他方法一样。
如果想让新的线程调用run(),需要在线程上调用start()。
尝试
new MyThread().start();
向自己证明这一点的一种方法是在调试器中单步执行您的程序,这将表明只有一个线程。
关于java - 为什么主线程在继续之前等待另一个线程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337611/