我找到了这个解决方案,以了解线程是否已被中断。
public class OurThread extends Thread(){
private volatile boolean stop = false;
public void run(){
while (!stop) {
//Do your actions
}
}
}
但是我的run方法只执行一次,所以将insisde放在while循环中是没有意义的。我发现的另一种方法是检查Thread.isInterrupted()标志,然后终止线程。我的run()方法很长,所以我必须检查很多次这种情况使我的代码变脏。
我必须将它应用到四个不同的过程中,所以我试图找到一个更简单,更清洁的方法。我希望是否有类似的东西:
try{//my code}
catch(interrumption)
问题是,由于我的线程是通过使用future.cancel()进行中断的,所以我的run()代码中没有抛出中断,然后我也无法做到这一点。
有什么建议吗? 到目前为止,如果线程被取消,我会在代码之间检查很多次。 谢谢:))
答案 0 :(得分:5)
首先,不要扩展Thread,你应该实现Runnable或Callable。
其次,你可以添加像
这样的方法static void checkInterrupt() {
if(Thread.currentThread().isInterrupted())
throw new IllegalStateException("Interrupted");
}
并将其放在四个地方。这不会增加太多代码,也不会像不会停止的任务那样难看。
答案 1 :(得分:1)
您的任务(Runnable或Callable)不能被中断,除非它具有内置机制来响应中断。这也取决于你的设计;比如,当确切的任务期望被打断时。通常我们在任务达到安全状态时执行。
因此,检查是否收到中断,然后进行适当的响应。要重用代码,您可以使用@Peter建议的方法。