在java中中断线程
我发现这个解决方案是为了知道线程是否被中断在java中中断线程,java,multithreading,interrupt,future,Java,Multithreading,Interrupt,Future,我发现这个解决方案是为了知道线程是否被中断 public class OurThread extends Thread(){ private volatile boolean stop = false; public void run(){ while (!stop) { //Do your actions } } } 但是我的run方法只执行一次,所以把它放在一个while循环中是没有意义的。我发现的另一种
public class OurThread extends Thread(){
private volatile boolean stop = false;
public void run(){
while (!stop) {
//Do your actions
}
}
}
但是我的run方法只执行一次,所以把它放在一个while循环中是没有意义的。我发现的另一种方法是检查Thread.isInterrupted()标志,然后终止线程。我的run()方法相当长,因此我必须多次检查这种情况,使我的代码变脏
我必须把它应用到四个不同的过程中,所以我试图找到一个更简单,更干净的方法。我想知道是否有这样的事情:
try{//my code}
catch(interrumption)
问题是,由于使用future.cancel()对我的线程进行了中断,因此中断不会在run()代码中抛出,因此我也不能这样做
有什么建议吗?
到现在为止,如果线程被取消,我会在代码之间检查很多次。
谢谢:)首先,不要扩展线程,应该实现Runnable或Callable 其次,您可以添加如下方法
static void checkInterrupt() {
if(Thread.currentThread().isInterrupted())
throw new IllegalStateException("Interrupted");
}
把这个放在四个地方。这不会添加太多代码,也不像一个不会停止的任务那么难看。您的任务(可运行或可调用)不能被中断,除非它有内置的机制来响应中断。也取决于你的设计;比如,当任务预期被中断时。通常,我们在任务达到安全状态时执行此操作
所以,您检查是否接收到中断,然后做出适当的响应。要重用代码,您可以使用@Peter.建议的方法。还有一个
Thread
类的静态方法,Thread.interrupted()
+1。也许可以解释一下,实现Runnable
是另一种选择?另外,为什么IllegalStateException
?它是一个运行时,而不是一个必须声明或捕获的检查异常。非法状态意味着它由于状态而无法继续,在这种情况下设置了中断标志。我已经实现了runnable,问题是future.cancel()试图中断我的线程,但大多数情况下它无法继续,因此我必须以较低的速度中断它level@PeterLawrey整洁,我喜欢。预计随时都会结束。我正在构建一个流程的管理面板,可以选择强制流程结束。您可以将您的运行方法划分为多个较小的模块或子任务(即分为多个运行)。这样你就可以很容易地检查是否有中断,并且只有在安全的情况下才能继续。这正是我试图避免的。我需要马上结束这个过程。我试试看会发生什么