当Java TimerTask在Timer中被调度时,它是否已经“执行”了?

2024-01-10

我想澄清一些关于 TimerTask 的事情。当你有下面的代码时:

timer.schedule(task, 60000);

如果任务计划在接下来的 1 分钟内运行,则任务对象是否已经在执行?

因为在我的代码中的某个地方我调用了 task.cancel() 但似乎该调用并没有阻止

要执行的任务。我什至记录了调用的返回值,它返回 false。

当我阅读取消方法的文档时,我提出了我的问题:

取消 TimerTask 并将其从 Timer 队列中删除。 通常,如果调用没有阻止 TimerTask,则返回 false 至少运行一次。后续调用没有任何效果。如果调用阻止了计划执行的发生,则返回 true,否则返回 false。

我相信我在 1 分钟延迟之前调用了 cancel() 。但为什么cancel返回false,

[任务] 已经在执行了吗?

希望您能给我线索/提示,甚至对此进行解释。谢谢!


  • 任务计划在接下来的 1 分钟内运行,任务对象是否已经在执行

不,它将调用run http://download.oracle.com/javase/6/docs/api/java/util/TimerTask.html#run%28%29方法在 60 秒内完成此任务。如果task.cancel()回报false,这可能意味着三件事:

  • 该任务被安排为一次性执行并且已经运行或
  • 该任务从未被安排或
  • 任务已取消或

因此,如果您确定您致电cancel在安排任务后 60 秒之前,您可能会多次调用它,并从后续任务中获取结果cancel,或者您正在对其他任务调用取消。


一般来说,我会建议反对Timer http://download.oracle.com/javase/6/docs/api/java/util/Timer.html赞成预定执行服务 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html

您可以通过以下方式实现所需的功能:

ScheduledExecutorService.schedule(可调用,延迟,时间单位) http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html#schedule%28java.util.concurrent.Callable,%20long,%20java.util.concurrent.TimeUnit%29

概述了 ScheduledExecutorService 成为首选方式的原因here https://stackoverflow.com/questions/409932/java-timer-vs-executorservice/409993#409993:

  • Timer 可能对系统时钟的变化敏感,而 ScheduledThreadPoolExecutor 则不然

  • Timer只有一个执行线程,因此长时间运行的任务会延迟其他任务。 ScheduledThreadPoolExecutor 可以配置任意数量的线程。此外,如果您愿意,您可以完全控制创建的线程(通过提供 ThreadFactory)

  • TimerTask 中抛出的运行时异常会杀死该线程,从而使 Timer 死亡:-( ...即计划任务将不再运行。ScheduledThreadExecutor 不仅捕获运行时异常,而且可以让您根据需要处理它们(通过覆盖来自的 afterExecute 方法) ThreadPoolExecutor). 抛出异常的任务将被取消,但其他任务将继续运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当Java TimerTask在Timer中被调度时,它是否已经“执行”了? 的相关文章

  • 停止从标准输入读取

    我正在用 LInux C 编写一个简单的控制台应用程序 它接受来自命令行的用户输入 我在用std getline std cin std cin gt gt text在一个线程中 10 秒后 我想停止接受控制台输入并写一条短信 然后做其他事
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐