Java 了解ScheduledThreadPoolExecutor
我知道由于各种原因,我必须使用它而不是java.util.Timer。因此,为了研究这一点,我查看了文档,我有几个问题: scheduleWithFixedDelay是如何工作的?我的理解是:它首先在给定的延迟后执行任务。任务完成后,它将等待指定的时间,然后再次执行任务。 当我将任务提交到scheduleAtFixedRate时会发生什么情况?该任务的执行时间比指定的延迟时间要长得多?就像我希望每5秒执行一次任务,但需要10秒才能完成。我的理解是,任务将被保存在一个队列中,并在核心线程可用时执行 以下是我对scheduleWithFixedDelay和scheduleAtFixedRate的不同之处的理解:scheduleWithFixedDelay等待任务完成执行,等待指定的时间,然后再次启动任务,其中as scheduleAtFixedRate将继续启动任务,而不管任务是否已完成。对的 对的 不完全是。如果固定速率任务所用时间超过其周期,则它将在完成后立即再次运行,但下一次运行不会等待线程。见下文。 与固定延迟任务一样,固定速率任务确实关心其上一次运行是否已完成。根据,如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。 这样想: 对于固定延迟任务,您可以指定一个时间段,该时间段将是两次运行之间的确切时间量。任务的实际持续时间对延迟没有影响。 对于固定速率任务,您可以指定一个期间,该期间将是两次运行之间的最大时间。如果任务的实际持续时间比周期长,则会降低速率,并且实际上不会出现延迟。 对的 不完全是。如果固定速率任务所用时间超过其周期,则它将在完成后立即再次运行,但下一次运行不会等待线程。见下文。 与固定延迟任务一样,固定速率任务确实关心其上一次运行是否已完成。根据,如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。 这样想: 对于固定延迟任务,您可以指定一个时间段,该时间段将是两次运行之间的确切时间量。任务的实际持续时间对延迟没有影响。 对于固定速率任务,您可以指定一个期间,该期间将是两次运行之间的最大时间。如果任务的实际持续时间比周期长,则会降低速率,并且实际上不会出现延迟。Java 了解ScheduledThreadPoolExecutor,java,multithreading,threadpool,scheduledexecutorservice,Java,Multithreading,Threadpool,Scheduledexecutorservice,我知道由于各种原因,我必须使用它而不是java.util.Timer。因此,为了研究这一点,我查看了文档,我有几个问题: scheduleWithFixedDelay是如何工作的?我的理解是:它首先在给定的延迟后执行任务。任务完成后,它将等待指定的时间,然后再次执行任务。 当我将任务提交到scheduleAtFixedRate时会发生什么情况?该任务的执行时间比指定的延迟时间要长得多?就像我希望每5秒执行一次任务,但需要10秒才能完成。我的理解是,任务将被保存在一个队列中,并在核心线程可用时执行