我写了以下代码:
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");
}
}
所以我把连接方法放在主线程上。当我运行它时,它的执行永远不会结束。 为什么会这样?为什么主线程不会结束?为什么它会无限期地奔跑。
答案 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()永远不会返回。