📜  建议中显示的 java.util.concurrent.CancellationException (1)

📅  最后修改于: 2023-12-03 15:39:29.144000             🧑  作者: Mango

Java.util.concurrent.CancellationException介绍

Java中的java.util.concurrent.CancellationException是一个运行时异常类,它被用来表示执行被取消的操作。

在Java系统中,CancellationException通常是由Executor框架抛出的。当使用Executor来管理线程池时,可能会发现某些任务需要被中止(例如,任务会超时或被用户取消)。

这时,Executor会将CancellationException交给等待任务完成的线程,以表明任务已被取消,因为在大多数情况下,取消操作将发生在任务已经开始执行的情况下。

代码示例

以下是一个简单的示例,演示了如何通过使用Executor中的submit方法来启动一个任务:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() {
    public String call() throws Exception {
        Thread.sleep(1000);
        return "Hello World!";
    }
});

// user cancels the task
future.cancel(true);

try {
    String result = future.get();
    System.out.println(result);
} catch (CancellationException e) {
    System.out.println("Task has been cancelled.");
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}

executor.shutdown();

在上面的示例中,使用了Executor来提交一个Callable对象,该对象会在执行后返回一个String值。任务会休眠1秒钟,然后返回“Hello World!”字符串。

一旦任务开始执行,我们尝试取消它,并从Future对象中获得结果。由于任务已取消,因此get方法将抛出一个CancellationException异常。

总结

CancellationException提供了一种在Java中取消任务的机制。这种异常是由Executor框架抛出的,它向等待执行完成的线程表示任务已被取消。在使用Executor时,请记得捕获CancellationException并根据需要处理它。