nij*_*ija 9 java multithreading
在发生特定超时时,我需要杀死/取消/中断/失败正在运行的线程.我使用ExecutorService来管理一个线程池,通过它我可以使用Future的cancel()方法取消该任务,该方法从ExecutorService的视图中删除它,但线程本身继续运行.
在线查看,人们谈论使用isInterrupted()方法中断具有循环的线程,或者正在等待可以通过显示InterruptedException来处理的IO.
杀死没有循环(或有任何其他挂钩)并且不等待IO的线程的一般做法是什么?环顾四周,Thread.stop()似乎做我需要的东西(只是盲目地杀死线程),但不建议使用它.
如果您使用 anExecutorService那么您不应该弄乱它的线程:这个概念隐藏在执行器后面,这是比线程更高级别的概念,因此不提供管理它们的方法。我强烈建议您停止整个执行器,而不是尝试停止其线程之一。
请注意,线程中的线程ExecutorService正在循环,它们的循环包括等待任务队列中可用的任务。
Java 中没有简单的方法来停止不循环的线程,你可以做的是:
Runnable不时检查它是否应该停止(与可以用作线程循环中的条件的标志相同)。Thread.interrupt()尝试(尽力而为,如果您不知道自己在做什么,则非常不安全)停止与同步相关的等待/锁定/获取/...线程被卡住。| 归档时间: |
|
| 查看次数: |
3978 次 |
| 最近记录: |