如何正确关闭所有线程?

时间:2014-04-25 17:02:09

标签: java multithreading

我有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()。但它的工作速度还不够快。某些计算可能需要几秒钟才能完成并且下一次迭代开始。

还有其他可靠的方法可以立即关闭线程吗?

1 个答案:

答案 0 :(得分:1)

您需要一个调用线程的中断操作并停止当前执行。以下是一些文档:http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html

  

中断表示线程应该停止正在执行的操作并执行其他操作。由程序员决定线程如何响应中断,但线程终止是很常见的。