当前位置: 首页 > 知识库问答 >
问题:

未来方法取消返回值的可靠性(假)

薛弘济
2023-03-14

假设我使用 ScheduledThreadPoolExecutor 计划了一个任务,并找回了一个 Future。

我后来决定要取消该 Future,并依靠取消的返回值来触发一些清理操作。如果任务已经在运行,我不希望它被中断(所以我将false作为参数传递)。

取消的返回可靠吗?也就是说,如果取消返回“true”,任务是否可能实际上正在运行?

查看OpenJDK 8中的代码,看起来可能存在竞争条件,其中“取消”将任务的状态设置为CANCELLED并返回true,但运行者可能已经通过了“检查”以开始执行。

就我所见,将执行计算,但结果未设置(这很好)。然而,在我的例子中,“计算”有副作用,所以我想知道我是否真的取消了它。

共有1个答案

袁鸿畴
2023-03-14

cancel(布尔)的javadoc声明

尝试取消此任务的执行。如果任务已完成、已取消或由于某些其他原因无法取消,则此尝试将失败。

如果成功,并且在调用 cancel 时此任务尚未启动,则此任务应永远不会运行。如果任务已启动,则 mayInterruptIfRunning 参数确定是否应中断执行此任务的线程以尝试停止该任务。

强调我的。在所有非失败的情况下,调用都将返回< code>true。因此,该方法可能返回< code>true,并且您的任务正在运行。

 类似资料:
  • 根据http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html返回,如果被调用。 此方法返回后,对isDone()的后续调用将始终返回true。 但是,有可能任务正在运行并且设置为。那么,在调用之后应该返回什么?因为取消(这是错误的)而返回? 此外,尚不清楚方法是否返回。 P、 我正在实现一些简单的线程池,所以

  • 我创建了一个父类Repo,它具有用于在列表中插入、删除、显示和删除对象的方法。回购是一个泛型类。我为Repo创建了一个子类(如DepartmentRepo类)和pass Department、Employee等。上课。我想对传递到Repo类的任何类对象执行插入、删除、显示和删除操作。我需要获得方法“get”的返回值,它来自Java中的泛型类。我只能从泛型中获得方法名这里我提到了代码文件

  • 密码 考虑以下情况... 事务已启动(使用Spring@Transactional annotation) 消息丢失了吗? 如果不是,那么如何在事务下从队列中读取消息(步骤2)? 是否使用了某种队列浏览器,以便从队列中读取消息但不消费?

  • 由于上面代码上调用的方法的返回值,我得到了可能的空指针解引用。 有人能让我知道确切的问题和为什么它是一个问题吗? 提前道谢!如果需要其他细节,请告诉我。

  • 我从Sonar那里得到问题:“由于调用方法的返回值,样式-可能的空指针取消引用。findbugs:np_null_on_some_path_from_return_value。问题在lockuntil.after(new Date())上; 我试图用 但它引入了其他问题。 谁能指导一下吗?

  • 本文向大家介绍JS返回iframe中frameBorder属性值的方法,包括了JS返回iframe中frameBorder属性值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS返回iframe中frameBorder属性值的方法。分享给大家供大家参考。具体分析如下: frameborder 属性规定是否显示框架周围的边框。 希望本文所述对大家的javascript程序设计有所帮助