Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 了解ScheduledThreadPoolExecutor_Java_Multithreading_Threadpool_Scheduledexecutorservice - Fatal编程技术网

Java 了解ScheduledThreadPoolExecutor

Java 了解ScheduledThreadPoolExecutor,java,multithreading,threadpool,scheduledexecutorservice,Java,Multithreading,Threadpool,Scheduledexecutorservice,我知道由于各种原因,我必须使用它而不是java.util.Timer。因此,为了研究这一点,我查看了文档,我有几个问题: scheduleWithFixedDelay是如何工作的?我的理解是:它首先在给定的延迟后执行任务。任务完成后,它将等待指定的时间,然后再次执行任务。 当我将任务提交到scheduleAtFixedRate时会发生什么情况?该任务的执行时间比指定的延迟时间要长得多?就像我希望每5秒执行一次任务,但需要10秒才能完成。我的理解是,任务将被保存在一个队列中,并在核心线程可用时执行

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

scheduleWithFixedDelay是如何工作的?我的理解是:它首先在给定的延迟后执行任务。任务完成后,它将等待指定的时间,然后再次执行任务。 当我将任务提交到scheduleAtFixedRate时会发生什么情况?该任务的执行时间比指定的延迟时间要长得多?就像我希望每5秒执行一次任务,但需要10秒才能完成。我的理解是,任务将被保存在一个队列中,并在核心线程可用时执行 以下是我对scheduleWithFixedDelay和scheduleAtFixedRate的不同之处的理解:scheduleWithFixedDelay等待任务完成执行,等待指定的时间,然后再次启动任务,其中as scheduleAtFixedRate将继续启动任务,而不管任务是否已完成。对的 对的 不完全是。如果固定速率任务所用时间超过其周期,则它将在完成后立即再次运行,但下一次运行不会等待线程。见下文。 与固定延迟任务一样,固定速率任务确实关心其上一次运行是否已完成。根据,如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。 这样想:

对于固定延迟任务,您可以指定一个时间段,该时间段将是两次运行之间的确切时间量。任务的实际持续时间对延迟没有影响。 对于固定速率任务,您可以指定一个期间,该期间将是两次运行之间的最大时间。如果任务的实际持续时间比周期长,则会降低速率,并且实际上不会出现延迟。 对的 不完全是。如果固定速率任务所用时间超过其周期,则它将在完成后立即再次运行,但下一次运行不会等待线程。见下文。 与固定延迟任务一样,固定速率任务确实关心其上一次运行是否已完成。根据,如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。 这样想:

对于固定延迟任务,您可以指定一个时间段,该时间段将是两次运行之间的确切时间量。任务的实际持续时间对延迟没有影响。 对于固定速率任务,您可以指定一个期间,该期间将是两次运行之间的最大时间。如果任务的实际持续时间比周期长,则会降低速率,并且实际上不会出现延迟。