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

标签 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 获得输出(独立于循环中有多少步),然后我从主线程获得消息。创建线程的想法是异步执行代码,但在这里我观察到明显的同步行为。我想念什么?

提前致谢!

最佳答案

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

如果想让新的线程调用run(),需要在线程上调用start()。

尝试

new MyThread().start();

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

关于java - 为什么主线程在继续之前等待另一个线程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337611/

相关文章:

Android 中的 java 泛型

java - Spring Data MongoDB - 保存 LocalDate/LocalDateTime 时,值被设置为昨天

c - 为什么使用 select() 而不是 sleep()?

c++ - 如何在 C++ 程序中间注销昂贵的文件 I/O

java - Java App 是否显示使用的版本?

java - 集成 Spark SQL 和 Spark Streaming 时出现 Not Serializable 异常

java - 从 Fragment 外部更新 TextView

python - python 中(多线程)套接字的列表/数组

python - 如何并行运行多个 Selenium 驱动程序?

python - 使用并行处理计算 2D 中每对点之间的距离