我如何终止子级的父线程?

问题描述 投票:2回答:3

如何从创建主线程的子线程中终止父线程(主线程)?我尝试了System.exit(1),但它仅终止子线程。我也尝试过在main的while循环中放置一个条件,但显然它将在退出前尝试读取1个额外的输入。

public static void main(String[] args) throws IOException
{
    new Thread(new Runnable() 
    { 
      public void run() 
      { 
        while(true) 
        { 
            //meet a condition then terminate
        } 
      } 
    }).start(); 
    while (true)
    {
        String a = input.nextLine();
        //do something with input
    }
}
java multithreading concurrency exit
3个回答
5
投票

您不应该这样做。从该线程外部终止任何线程是一个非常糟糕的主意。这是因为终止线程不知道目标正在做什么以及终止是否在“安全”点。例如,您可能正在编写输出,进行计算或进行任何其他操作。

相反,您应该向另一个线程发送信号(使用多种方式中的任何一种),并且该线程自身退出。要退出线程,只需从线程的run方法返回即可。


1
投票

从子级中杀死Thread并不是一个好习惯,但是您可以对子级线程进行编程以更新父级中的字段。如果此字段不为null,则父级应停止。

take a look to this question

© www.soinside.com 2019 - 2024. All rights reserved.