【发布时间】:2015-04-27 10:18:20
【问题描述】:
如何从创建我的主线程的子线程中终止父(主)线程?我试过 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
}
}
【问题讨论】:
-
System.exit(1)终止所有个线程。要回答您的问题,您不能 -input.nextLine是阻塞和不可中断,因此一旦您开始等待输入,您就无法停止。 -
如果我反其道而行之,在 main 的 while 循环中调用 System.exit(1),它会终止子进程吗?
-
来自the documentation:终止当前运行的Java虚拟机。
System.exit退出整个JVM。 所有线程退出。 JVM 终止。就是这样。在任何情况下你都不应该使用它——它几乎没有一个好的用例。 -
B.T.W.,“父”和“子”在 Java 线程中没有意义。线程 groups 可以有父/子关系,并且每个 Thread 都属于一个 ThreadGroup,但是如果线程 A 创建线程 B,则库不会授予任何一个线程任何特殊权限或与另一个,也不记得是哪个创造了哪个。
标签: java multithreading concurrency exit