为什么主线程在继续之前等待另一个线程完成?

时间:2010-12-02 16:58:30

标签: java multithreading

我在复杂的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获取输出(独立循环中有多少步骤),然后我从主线程获取消息。创建线程的想法是异步执行代码,但在这里我观察到一个明确同步的行为。我错过了什么?

提前致谢!

1 个答案:

答案 0 :(得分:12)

当你调用run()时,你正在调用当前线程中的run()方法!就像你为另一个对象调用任何其他方法一样。

如果你想要一个新线程来调用run(),你需要在线程上调用start()。

new MyThread().start();

向自己证明这一点的一种方法是在调试器中逐步执行程序,这将显示只有一个线程。