ScheduledThreadPoolExecutor类

java.util.concurrent.ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,可以另外安排命令在给定的延迟后运行,或者定期执行.

ScheduledThreadPoolExecutor Methods

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命令)

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

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.

示例

以下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");      
      }
   }
}

这将产生以下结果.

输出

beep
beep
beep
beep