Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将联接放在主线程上出现意外行为_Java_Multithreading - Fatal编程技术网

Java 将联接放在主线程上出现意外行为

Java 将联接放在主线程上出现意外行为,java,multithreading,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 t

我编写了以下代码:

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");

}


 }
所以我把join方法放在了主线程上。当我运行它时,它的执行永远不会结束。 为什么会这样?为什么主线程没有结束?为什么它会无限期运行。

方法将等待调用它的线程完成。在代码中,您正在当前线程上调用
join()。主线程现在将等待自己完成。这永远不会发生,因为它在等待自己

您不应该加入主线程,而应该加入您启动的线程

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

try {
    demo.t.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}
join()
方法等待调用它的线程完成。在代码中,您正在当前线程上调用
join()。主线程现在将等待自己完成。这永远不会发生,因为它在等待自己

您不应该加入主线程,而应该加入您启动的线程

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

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

只是这段代码的另一个透视图

即使不初始化ThreadDemo对象,此代码也将挂起 在主程序中

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

这只是此代码的另一个透视图

即使不初始化ThreadDemo对象,此代码也将挂起 在主程序中

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

请缩进代码,使其可读。谢谢。我在一本书中了解到:在多线程程序中,主线程必须是完成运行的最后一个线程。如果主线程在子线程完成之前完成,那么Java运行时系统可能会“挂起”。有人能解释一下为什么会挂起吗?请缩进代码以便可读。谢谢。我在一本书中了解到:在多线程程序中,主线程必须是完成运行的最后一个线程。如果主线程在子线程完成之前完成,那么Java运行时系统可能会“挂起”??