当前位置: 首页 > 面试题库 >

等待Java中的计时器完成

戚育
2023-03-14
问题内容

我正在使用java.util.Timer安排定期任务。有一次,我想将其关闭,然后
等待它完成

Timer.cancel()将阻止将来运行任何任务。如何确保当前没有任何任务在运行(或者正在等待,请耐心等待)?

我可以介绍外部同步机制,但看不到它们如何涵盖所有情况。例如,如果我在任务中的某些Monitor上进行同步,则我仍然会错过任务刚刚开始执行但没有使用Monitor的情况。

等待所有任务(包括当前正在运行的任务)真正完成之前的推荐做法是什么?


问题答案:

您最好使用ScheduledExecutorService而不是Timer来安排您的定期任务。ScheduledExecutorService提供了一个shutdown()方法,该方法将执行所有待处理的任务。然后,您可以调用awaitTermination()以等待shutdown()完成。



 类似资料:
  • 问题内容: 我有一个登录框架,我必须从另一个线程等待。成功登录后,框架将自行处置。我想弹出该应用程序的主框架。现在,我正在观看一个布尔值,以确定何时启动主机。正确的做法是什么?观看布尔值只是感觉并不优雅。 问题答案: 如果您有Java 5或更高版本,则可以使用CountDownLatch。例如,假设主框架最初处于控制状态,则让主框架创建一个倒数为1的,然后将此锁存器传递给登录框架。然后让主机等待锁

  • 问题内容: 问题描述 : - 步骤1: 在主线程中从用户那里获取输入FILE_NAME。 步骤2: 对该文件执行10个操作(即,计数字符,计数行等。),所有这10个操作必须位于单独的线程中。这意味着必须有10个子线程。 步骤3: 主线程等待,直到所有那些子线程完成。 步骤4: 打印结果。 我做了什么 :- 我用3个线程做了一个示例代码。 我不希望您遇到文件操作代码。 问题:- 我上面的代码没有给出

  • 我通读了Dart/flatter中的Async/Await/then,试图理解为什么aysnc函数中的Await不会等到完成后再继续。在我的UI中,有一个按钮调用一个异步方法来返回一个位置,该位置总是返回null,并且不等待函数完成。 该函数将调用推送到一个新的UI页面,该页面选择一个位置,并应返回一个结果。如何使该函数等待结果?我不是在使用异步吗?

  • 问题内容: 在我的程序执行过程中,启动了多个线程。线程数量取决于用户定义的设置,但是它们都使用不同的变量执行相同的方法。 在某些情况下,需要在执行过程中进行清理,其中一部分是停止所有线程,尽管我不希望它们立即停止,我只是设置了一个变量来检查它们是否终止。问题在于线程停止之前最多可能需要1/2秒。但是,我需要确保所有线程都已停止,然后才能继续进行清理。清理是从另一个线程执行的,因此从技术上讲,我需要

  • 在我的反应组件中,我将数据从超文本传输协议加载到表中。 当我删除一条记录时,我在后端执行删除,并在响应中再次调用读取表数据。有时删除的行不会从GUI中的表中删除。我认为需要等待,直到删除执行,以便我获取表数据,只有当我知道行被删除。 我的删除功能:

  • 现在我想让所有的期货最多等待n秒,直到全部完成。我知道我可以调用,但是如果我在循环中对我的所有期货顺序地调用它,则超时开始增加。伪代码: 块会出现超时,直到结果就绪。因此,如果第一个在超时之前完成,第二个也在超时之前完成,依此类推,则整个执行时间最多为而不是。 因此,我正在寻找一个方法,它接受的列表和一个超时,并行运行所有的结果,然后返回一个未来结果的集合。有什么想法吗?