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运行时系统可能会“挂起”??