📅  最后修改于: 2023-12-03 15:39:29.144000             🧑  作者: Mango
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并根据需要处理它。