gpt4 book ai didi

Java ScheduledExecutorService 幕后工作

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

scheduleAtFixedRate 这样的东西是如何工作的?它在幕后是如何工作的?使用它会受到惩罚吗?

更具体地说,我有一个任务想要定期运行,比如每 12 小时运行一次。该时间段根本不严格,所以我的第一直觉是检查每个请求(tomcat 服务器)是否自上次执行任务以来已经超过 12 小时,如果是,则执行它并重置计时器。这样做的缺点是,我必须对每个请求进行少量检查,确保任务仅运行一次(使用信号量或类似的东西),并且如果没有请求,任务可能不会在很长一段时间内执行。

scheduleAtFixedRate 使安排重复任务变得更加容易,但由于我不知道它是如何做到的,所以我不知道对性能的影响是什么。是否有一个线程不断检查任务是否应该运行?等等

编辑:在 Timer.java 中,有一个 mainLoop 函数,根据我的理解,它是这样的(过于简化):

while(true) {
currentTime = System.currentTimeMillis();
if(myTask.nextExecutionTime == currentTime) myTask.run();
}

这个循环不会尝试尽可能快地运行并使用大量 CPU(我知道,显然不会,但是为什么)?那里没有 Thread.sleep 来减慢速度。

最佳答案

如果您想了解其工作原理,可以阅读代码。

使用 ScheduledExecutorService 在 CPU 和内存方面有一定的开销,但是在小时、分钟、秒甚至毫秒的尺度上,它可能不需要担心。如果您的任务在微秒范围内运行,我会考虑更轻量级的任务。

简而言之,开销可能太小以至于您无法注意到。它给您带来的好处是易于使用,而且可能是值得的。

关于Java ScheduledExecutorService 幕后工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082644/

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