【发布时间】:2020-04-07 21:37:09
【问题描述】:
所以我有一个关于 java 中线程的 interrupt() 方法的问题。这是我的一段代码:
threads.forEach(Thread::start);
threads.forEach(thread -> {
try {
thread.join();
if (done){
thread.interrupt();
}
} catch (InterruptedException e){
e.printStackTrace();
}
});
现在,如您所见,我首先启动每个线程并加入它们。我想知道的是“thread.interrupt()”是否像我认为的那样做。我创建了一个不稳定的布尔“完成”(默认情况下为假)。我在某处还有另一段代码,每个线程都在其中搜索文件中的内容。当找到那个东西时,我将布尔值设置为 true。我希望这可以阻止所有其他尚未完成的线程运行。
但是,有件事告诉我,这并不像我做的那么容易。因此,如果有人能告诉我我所做的是否正确(如果不是),我将不胜感激。
【问题讨论】:
-
你启动的线程必须自己处理中断。你没有提供实现,所以我们不知道。
-
'thread.join()' 将等待线程从其 run() 方法返回。之后,就没有什么可以打断的了。
-
所以如果我在threads.start 之后和threads.join 之前使用iterrupt,会有什么不同吗?我想这违背了加入的目的?
-
这里有很多关于
Thread.interrupt()的问题。在你自己做更多的测试之前,我建议你做some research。这并不像听起来那么简单。 -
从另一个角度看:也许你的线程的可运行代码应该是检查
done状态的代码,它们可以自行终止,而不是使用外部线程(这里:主线程)来控制它们。只是一个想法。
标签: java multithreading