2010-12-02 158 views
2

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

提前致谢!

+2

当你找到你喜欢的答案时,接受它是礼貌的。有时值得等待看看是否有更好的答案出现,但这取决于你。 – 2010-12-02 17:04:50

+0

当然,非常感谢!实际上我开始和运行时感到困惑。 – Tim 2010-12-03 09:35:56

回答

11

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

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

试图证实这一点

new MyThread().start(); 

一种方式是通过你的程序在调试器中的步骤,这将表明,只有一个线程。

相关问题