如果父线程中的任何一个发生异常,如何停止子线程

时间:2016-06-18 10:44:47

标签: java multithreading executorservice

我想停止一个没有循环的线程,如

while(!cancelled) //where cancelled is volatile variable
{
   //
}

不能用,因为我想在没有循环的情况下执行长时间运行的任务, 如果从父线程

中的任何一个发生异常,如何停止子线程

@Oliver

正如oracle docs中提到的那样

for (int i = 0; i < inputs.length; i++) {
    heavyCrunch(inputs[i]);
    if (Thread.interrupted()) {
        // We've been interrupted: no more crunching.
        return;
    }
}

在上面的代码if()只有在heavyCrunch(inputs [i])完成时才会调用

1 个答案:

答案 0 :(得分:0)

看起来你的目标是中断驱动的应用程序。您可以保留已生成的线程列表,并在异常中迭代其他线程并中断它们。

https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html