【发布时间】:2011-12-23 11:17:52
【问题描述】:
在发生特定超时时,我需要杀死/取消/中断/使正在运行的线程失败。我使用 ExecutorService 来管理一个线程池,通过它我可以使用 Future 的 cancel() 方法取消任务,该方法将其从 ExecutorService 的视图中删除,但线程本身会继续运行。
在网上环顾四周,人们talk about interrupting threads 使用 isInterrupted() 方法有一个循环或正在等待可以通过表面 InterruptedException 处理的 IO。
杀死既不循环(或没有任何其他钩子)也不等待 IO 的线程的一般做法是什么?环顾四周,Thread.stop() 似乎做了我需要的(只是盲目地杀死线程)但不建议使用。
【问题讨论】:
-
“盲目地杀死线程”是你永远不应该做的事情。
-
Thread.stop() 只适用于可以理解在每一行都停止的结果的琐碎代码。这种类型的代码也很容易添加行来检查中断标志。也就是说,即使在理论上它也不是一个理想的解决方案。
标签: java multithreading