ScheduledThreadPoolExecutor
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