scheduledfuture.cancel(true) 中断失败的demo
时间: 2024-02-17 07:02:44 浏览: 266
模拟中断事件的处理
以下是一个使用`ScheduledExecutorService`执行定时任务,并且在任务执行过程中忽略中断的示例代码:
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class ScheduledTaskDemo {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 创建一个定时任务,每隔1秒输出一次当前时间戳
ScheduledFuture<?> future = executor.scheduleAtFixedRate(() -> {
while (true) {
System.out.println(System.currentTimeMillis());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// 忽略中断
}
}
}, 0, 1, TimeUnit.SECONDS);
// 等待5秒后中断任务
Thread.sleep(5000);
future.cancel(true);
// 关闭线程池
executor.shutdown();
}
}
```
在上面的代码中,我们创建了一个`ScheduledExecutorService`线程池,并使用`scheduleAtFixedRate()`方法执行了一个定时任务,该任务每隔1秒输出一次当前时间戳。在任务的执行过程中,我们使用`while(true)`来模拟一个长时间运行的任务,并且在`catch`块中忽略了中断。
在主线程中,我们等待5秒后调用了`future.cancel(true)`方法来中断任务。但是,由于任务的`while(true)`循环中忽略了中断,导致中断操作失败,任务继续执行。因此,如果你运行上面的代码,你会发现即使调用了`future.cancel(true)`方法,任务仍在继续输出时间戳。
阅读全文