gpt4 book ai didi

java - 了解 ScheduledThreadPoolExecutor

转载 作者:行者123 更新时间:2023-11-30 07:12:54 26 4
gpt4 key购买 nike

我知道由于各种原因我必须使用它而不是 java.util.Timer。所以,为了研究这个,我正在查看文档,我有几个问题:

  1. scheduleWithFixedDelay() 是如何工作的? 我的理解是:它首先在给定的延迟后执行任务。一旦任务完成,它会等待指定的时间,然后再次执行任务。
  2. 当我向 scheduleAtFixedRate() 提交一个执行时间比指定延迟时间长得多的任务时会发生什么?就像我希望任务每 5 秒执行一次,但需要 10 秒才能完成。 我的理解是,任务将保存在队列中,一旦核心线程可用,就会执行
  3. 这是我对 scheduleWithFixedDelay()scheduleAtFixedRate() 区别的理解:scheduleWithFixedDelay() 等待任务完成执行,等待指定的时间,然后再次触发任务,因为 scheduleAtFixedRate 将继续触发任务而不关心它是否已完成。 正确吗?

最佳答案

  1. 正确。
  2. 不完全是。如果一个固定速率的任务花费的时间比它的周期长,它会在完成后立即再次运行,但下一次运行不会等待线程。见下文。
  3. 固定速率任务确实关心它之前的运行是否已经完成,就像固定延迟任务一样。根据 documentation , "如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。"

这样想:

  • 对于固定延迟任务,您指定一个时间段,该时间段将准确运行之间的时间量。任务的实际持续时间对延迟没有影响。
  • 对于固定速率任务,您指定一个周期,该周期将是运行之间的最大时间量。如果任务的实际持续时间长于周期,则速率降低,实际上没有延迟。

关于java - 了解 ScheduledThreadPoolExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922306/

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