我有8个线程,每个线程在其run方法中执行与此类似的循环:
for (int i = 0; i < someVar; i++) {
for (int j = 0; j < someOtherVar; j++) {
if (Thread.currentThread().isInterrupted()) {
return;
}
// another loop and some calculations here
}
}
我开始像这样的线程:
executor = Executors.newFixedThreadPool(threads);
// generate the threads and run them
for (int i = 0; i < threads; i++) {
MyClass cls = new MyClass(i);
executor.execute(cls);
}
现在我需要能够立即杀死我的线程,这就是为什么我在上面添加了if语句并在另一个点使用executor.shutdownNow()
。但它的工作速度还不够快。某些计算可能需要几秒钟才能完成并且下一次迭代开始。
还有其他可靠的方法可以立即关闭线程吗?
答案 0 :(得分:1)
您需要一个调用线程的中断操作并停止当前执行。以下是一些文档:http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
中断表示线程应该停止正在执行的操作并执行其他操作。由程序员决定线程如何响应中断,但线程终止是很常见的。