【发布时间】:2014-06-11 12:26:08
【问题描述】:
我有 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()。但它的工作速度还不够快。某些计算可能需要几秒钟才能完成并开始下一次迭代。
还有其他可靠的方法可以立即关闭线程吗?
【问题讨论】:
-
为什么还不够快?
-
使用Future。
-
我认为首先要做的是测量任务在检查中断之间的时间间隔,并尝试通过引入更多检查来缩短该间隔。你试过吗?
-
如果这些任务正在等待或休眠或侦听套接字或任何你应该提到的东西。更多代码会有所帮助。
标签: java multithreading