调用thread.interrupt() 之后线程还是运行 runTask 该怎么让它停止
时间: 2024-10-20 16:07:10 浏览: 16
多线程示例应用.zip
在Java中,`Thread.interrupt()`方法用于中断正在执行的线程。然而,这并不总是立即生效,特别是当线程在一个阻塞操作(如`sleep()`)中时。`interrupt()`只是设置了一个标志,表明该线程应该在其内部循环检测到这个中断请求并响应它。如果线程没有捕获到这个中断异常,它将继续执行直到完成当前的任务。
如果你已经创建了一个线程并希望在调用`interrupt()`后让它停止执行`runTask()`,可以这样做[^1]:
```java
// 创建线程
Thread thread = new Thread(() -> {
// 模拟任务
while (true) {
try {
runTask(); // 这里是你要停止的任务
// 使用 Thread.sleep() 或其他阻塞操作
Thread.sleep(1000);
} catch (InterruptedException e) {
// 如果线程被打断,这里会捕获 InterruptedException
System.out.println("Thread interrupted");
break; // 打破循环,结束线程
}
}
});
// 启动线程
thread.start();
// 当你想要中断线程时
thread.interrupt();
```
在这个示例中,如果线程接收到`interrupt()`信号,它会在`try-catch`块中捕获`InterruptedException`并退出循环,从而结束`runTask()`。
阅读全文