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

Tim*_*Tim 4 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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,我总是首先从MyThread获取输出(独立于循环中有多少步骤),然后我从主线程获取消息.创建线程的想法是异步执行代码,但在这里我观察到一个明显同步的行为.我错过了什么?

提前致谢!

Pet*_*rey 12

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

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

尝试

new MyThread().start();
Run Code Online (Sandbox Code Playgroud)

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