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

时间:2015-04-27 10:18:21

标签: java multithreading concurrency exit

如何从我创建的子线程中终止父(主)线程?我试过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
    }
}

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

从它的孩子那里杀了Thread这不是一个好习惯,但你可以设计子线程来更新父母的字段。如果此字段不为null,则父项应该停止。

另外take a look to this question