Java 如何使主端持久?

Java 如何使主端持久?,java,multithreading,Java,Multithreading,如何使主进程最后结束? 例如,我编写了一些代码,创建了一个线程:Test,他创建了另外三个线程-Test2,但main在测试开始之前就完成了 如何使主进程最后结束 我猜你指的是主线。您需要使用thread.join()。您的主线程应该与它生成的线程连接,而子线程也需要与它生成的线程连接thread.join()等待线程完成后再继续 Test test = new Test("qwerty"); // start the test thread running in the background

如何使主进程最后结束?

例如,我编写了一些代码,创建了一个线程:Test,他创建了另外三个线程-Test2,但main在测试开始之前就完成了

如何使主进程最后结束

我猜你指的是主线。您需要使用
thread.join()
。您的主线程应该与它生成的线程连接,而子线程也需要与它生成的线程连接
thread.join()
等待线程完成后再继续

Test test = new Test("qwerty");
// start the test thread running in the background
test.start();
// do other stuff on the main thread
...
// wait for the test thread to finish
test.mThread.join();
在测试线程内部,您应该执行以下操作:

// start other threads
for (int i = 0; i < wclw.length; i++) {
    wclw[i] = new Test2(url, i + 1);
    wclw[i].start();
}
// do other stuff in the test thread if necessary
...
// come back and wait for them all to finish
for (int i = 0; i < wclw.length; i++) {
    wclw[i].mthread.join();
}
//启动其他线程
对于(int i=0;i
因此,子线程将等待它生成的每个线程完成,然后它将完成。主线程将等待子线程完成,然后最后完成

仅供参考:在子线程之前完成主线程不是问题。子线程不是守护进程线程,因此JVM将在JVM关闭之前等待它们完成。

使用Thread#join调用等待其他线程完成:

System.out.println("MAin STARTED!");
Test t = new Test("qwerty");
t.start();
t.mThread.join();
System.out.println("MAIN FINISHED");

您还可以使用正在运行的线程的“daemon”属性来解决这个问题

“守护进程”线程应该提供一般服务 在后台只要程序正在运行,但不是一部分 这是该计划的精髓所在。因此,当所有非守护进程 线程完成后,程序终止相反,如果存在 任何非守护进程线程仍在运行,程序不会终止。

方法Test.start应修改如下:

public void start(){
   this.mThread = new Thread(this);
   this.mThread.setDaemon(false); // This method must be called before the thread is started.
   this.mThread.start();
}

非常感谢。我理解并做了我想做的:)谢谢。我理解你的意思。@Gray-是的,你是对的,但我认为那不是真正的问题。。。我认为终止VM才是真正让Wild_klas发痒的地方。对于“如何使主进程最后结束?”这一问题,您的答案是唯一有效的答案。
System.out.println("MAin STARTED!");
Test t = new Test("qwerty");
t.start();
t.mThread.join();
System.out.println("MAIN FINISHED");
public void start(){
   this.mThread = new Thread(this);
   this.mThread.setDaemon(false); // This method must be called before the thread is started.
   this.mThread.start();
}