温馨提示×

JavaFutureTask如何取消任务

小樊
81
2024-11-19 13:33:44
栏目: 编程语言

在Java中,要取消一个FutureTask任务,你需要调用Future.cancel()方法。这个方法接受一个布尔参数mayInterruptIfRunning,用于指示是否允许中断正在运行的任务。

以下是一个简单的示例,展示了如何使用FutureTaskcancel()方法取消任务:

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个Callable任务
        Callable<String> task = () -> {
            Thread.sleep(5000); // 模拟一个耗时任务
            return "Task completed";
        };

        // 将Callable任务包装成FutureTask
        FutureTask<String> futureTask = new FutureTask<>(task);

        // 提交FutureTask到线程池
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(futureTask);

        try {
            // 等待一段时间后取消任务
            Thread.sleep(2000);
            boolean isCancelled = futureTask.cancel(true); // 设置mayInterruptIfRunning为true以允许中断
            if (isCancelled) {
                System.out.println("Task cancelled.");
            } else {
                System.out.println("Task not cancelled.");
            }
        } catch (InterruptedException e) {
            System.out.println("Main thread interrupted.");
        } finally {
            // 关闭线程池
            executorService.shutdown();
        }
    }
}

在这个示例中,我们创建了一个Callable任务,然后将其包装成FutureTask。接着,我们将FutureTask提交给一个线程池。在等待了2秒后,我们调用futureTask.cancel(true)来取消任务。如果任务被取消,isCancelled将为true,否则为false。最后,我们关闭线程池。

需要注意的是,如果任务已经开始执行(即running状态),那么cancel()方法会尝试中断任务。如果任务已经完成、已经取消或者由于其他原因而无法中断,那么cancel()方法将返回false

0