gpt4 book ai didi

java - 如何安排不受计算机挂起影响的定时事件

转载 作者:行者123 更新时间:2023-12-01 12:19:08 25 4
gpt4 key购买 nike

我想安排一个事件在特定时间发生,无论计算机是否同时挂起。如果计算机在事件应该发生时暂停,我希望在恢复时立即安排它。

我尝试了两种方法:带有 sleep() 的线程和 Swing Timer。这两种方法都依赖于定时延迟,并且都遇到相同的问题,即当计算机挂起时延迟倒计时暂停,并且仅当计算机恢复时才继续,因此事件发生在(原始延迟 + 暂停时间)。

然后我猜测我应该做的是使用带有目标日期的(util)计时器,因为这指定了一个时间点,如下所示:

Date targetDate = new Date(System.currentTimeMillis() + (60 * 1000)); // in 1 min
Timer eventTimer = new Timer();
eventTimer.schedule(eventThread, targetDate);

不幸的是,这也会以完全相同的方式受到影响。

我也查看了 ScheduledExecutorService(尽管我认为这个应用程序太过分了),但它明确使用了延迟,所以我认为它会遇到同样的问题。

我想做的事情可能吗?

最佳答案

the delay countdown is suspended

不,事实并非如此。否则就意味着恢复时系统时间是错误的!

Is what I want to do possible?

这是一个解决方案:

  • 让一个任务处理所有调度,例如每秒运行一次;
  • 在要执行的任务中,记录时间,使您的任务的类别与预期执行时间进行比较;
  • 将所有这些任务放入 PriorityQueue(甚至 PriorityBlockingQueue)中;
  • 当调度任务唤醒时,查看任务;如果预期执行时间小于或等于当前时间,则将其出列并执行;重复,直到所查看的任务的预期执行时间大于当前时间。

这不会实现“恢复后立即执行”,但接近。

关于java - 如何安排不受计算机挂起影响的定时事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816360/

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