ScheduledThreadPoolExecutor

优质
小牛编辑
136浏览
2023-12-01

java.util.concurrent.ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,并且可以另外调度命令以在给定延迟之后运行,或者定期执行。

ScheduledThreadPoolExecutor方法

Sr.No.方法和描述
1

protected 《V》 RunnableScheduledFuture《V》 decorateTask(Callable《V》 callable, RunnableScheduledFuture《V》 task)

修改或替换用于执行可调用的任务。

2

protected 《V》 RunnableScheduledFuture《V》 decorateTask(Runnable runnable, RunnableScheduledFuture《V》 task)

修改或替换用于执行runnable的任务。

3

void execute(Runnable command)

执行所需延迟为零的命令。

4

boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()

获取有关是否继续执行现有定期任务的策略,即使此执行程序已关闭也是如此。

5

boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()

获取有关是否执行现有延迟任务的策略,即使此执行程序已关闭也是如此。

6

BlockingQueue《Runnable》 getQueue()

返回此执行程序使用的任务队列。

7

boolean getRemoveOnCancelPolicy()

获取有关是否应在取消时立即从工作队列中删除已取消任务的策略。

8

《V》 ScheduledFuture《V》 schedule(Callable《V》 callable, long delay, TimeUnit unit)

创建并执行在给定延迟后变为启用的ScheduledFuture。

9

ScheduledFuture《?》 schedule(Runnable command, long delay, TimeUnit unit)

创建并执行在给定延迟后启用的一次性操作。

10

ScheduledFuture《?》 scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,随后在给定的时间段内启用; 即执行将在initialDelay之后开始,然后是initialDelay + period,然后是initialDelay + 2 * period,依此类推。

11

ScheduledFuture《?》 scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

创建并执行一个周期性动作,该动作在给定的初始延迟之后首先被启用,并且随后在一次执行的终止和下一次执行的开始之间给定延迟。

12

void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value)

设置是否继续执行现有周期性任务的策略,即使此执行程序已关闭。

13

void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value)

设置是否执行现有延迟任务的策略,即使此执行程序已关闭也是如此。

14

void setRemoveOnCancelPolicy(boolean value)

设置关于是否应在取消时立即从工作队列中删除已取消任务的策略。

15

void shutdown()

启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务。

16

List《Runnable》 shutdownNow()

尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。

17

《T》 Future《T》 submit(Callable《T》 task)

提交值返回任务以执行并返回表示任务的挂起结果的Future。

18

Future《?》 submit(Runnable task)

提交Runnable任务以执行并返回表示该任务的Future。

19

《T》 Future《T》 submit(Runnable task, T result)

提交Runnable任务以执行并返回表示该任务的Future。

例子 (Example)

以下TestThread程序显示了基于线程的环境中ScheduledThreadPoolExecutor接口的用法。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class TestThread {
   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledThreadPoolExecutor scheduler = 
         (ScheduledThreadPoolExecutor)Executors.newScheduledThreadPool(1);
      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedRate(new BeepTask(), 2, 2, TimeUnit.SECONDS);
      scheduler.schedule(new Runnable() {
         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }  
   static class BeepTask implements Runnable {
      public void run() {
         System.out.println("beep");      
      }
   }
}

这将产生以下结果。

输出 (Output)

beep
beep
beep
beep