gpt4 book ai didi

java - Future.cancel(true) 是否从队列中删除任务?

转载 作者:行者123 更新时间:2023-12-03 13:15:56 26 4
gpt4 key购买 nike

我对 Future.cancel(true) 的行为有点困惑。如果任务已经在运行,它会中断任务,但是那些尚未启动的任务又如何呢?他们确实被取消了,但他们是否从队列中删除了?在 Stackoverflow 中我发现了矛盾的答案:

Does not remove the task from the queue

Does remove the task from the queue

有人可以解释一下实际行为吗?

最佳答案

如果 futures 代表常用的 ThreadPoolExecutor 的作业,取消的任务不会立即从队列中删除,如方法 purge() 所示。表示:

purge()

Tries to remove from the work queue all Futuretasks that have been cancelled. This method can be useful as astorage reclamation operation, that has no other impact onfunctionality. Cancelled tasks are never executed, but mayaccumulate in work queues until worker threads can activelyremove them. Invoking this method instead tries to remove them now.However, this method may fail to remove tasks inthe presence of interference by other threads.

对于CompletableFuture,没有明确说明,但由于CompletableFutureExecutor抽象上运行并且无法控制实现无论如何,我们可以假设它不会从任何队列中删除已取消的作业。但是,如果在取消时未满足先决条件(即,当您使用 asyncJob.thenApplyAsy(..., someExecutor) 并在 asyncJob 完成之前取消它时),作业可能一开始就不会排队。

关于java - Future.cancel(true) 是否从队列中删除任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64414985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com