将连接放在主线程意外行为上

时间:2015-05-12 08:01:19

标签: java multithreading

我写了以下代码:

public class ThreadDemo implements Runnable
{
private Thread t ;
private String threadName;

 ThreadDemo(String threadName)
 {

     this.t = new Thread(this,threadName);
     t.start();
 }

public void run()
{
    System.out.println("New thread has been started!!!" + t.getName());

}
public  static void main(String args[])
{
new ThreadDemo("Thread-1");

Thread t = Thread.currentThread();
try {
    t.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

new ThreadDemo("Thread-2");

}


 }

所以我把连接方法放在主线程上。当我运行它时,它的执行永远不会结束。 为什么会这样?为什么主线程不会结束?为什么它会无限期地奔跑。

2 个答案:

答案 0 :(得分:4)

join()方法等待您调用它的线程完成。在您的代码中,您在当前线程上调用join() - 这与您调用它的线程相同。主线程现在要等待自己完成。这从未发生过,因为它在等待......

你不应该加入主线程,而是加入你开始的线程。

ThreadDemo demo = new ThreadDemo("Thread-1");

try {
    demo.t.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

这个代码的另一个视角......

即使您没有初始化ThreadDemo对象,此代码也会挂起 在主程序中。

简而言之,所有这些代码都可以简化为以下声明, Thread.currentThread()。join()永远不会返回。