一、ScheduledExecutorService
一、public interface ScheduledExecutorService extends ExecutorService
1、发布异步非周期任务
<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
2、发布异步周期任务
//一段时间后执行一个任务
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
//周期执行任务
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
scheduleAtFixedRate和scheduleWithFixedDelay区别
scheduleAtFixedRate
:
下一任务B在上一任务A的起点计时,当一个任务A开始时,下一个任务B的计时器,就以A任务开始点为起点开始计时,一旦计时器到达规定时间且A任务完成,B任务就会执行
scheduleWithFixedDelay
:
下一任务B在上一任务A的终点计时,当一个任务A完成时,下一个任务B的计时器就以A任务结束点为起点开始计时,达规定时间,任务就会执行
二、ScheduledThreadPoolExecutor
2、public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService
1、构造调度线程池
ScheduledThreadPoolExecutor(
int corePoolSize,
ThreadFactory threadFactory(非必传),
RejectedExecutionHandler handler(非必传
)
他的最大线程数是Integer.MAX_VALUE,空闲时间是0,任务队列是DelayedWorkQueue
2. 线程池关闭
两个关闭线程池的方法,一旦线程池被关闭,就会拒绝以后提交的所有任务:
void shutdown():
在以前已提交任务的执行中发起一个有序的关闭,但是不接受新任务。线程池中的周期任务、延时任务,根据下面的两个策略来判断是否继续正常运行,还是停止运行。
2、关闭线程时,对现有延时任务的处理策略
说明:在调用线程池调用了 shutdown()方法后,是否继续执行现有延时任务(就是通过 schedule()方法提交的延时任务 )的策略;
boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
//默认值为true,表线程池关闭后,会执行任务队列中的延时任务;false表示不会执行已经设置的延时任务
void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
3、关闭线程时,对现有周期任务的处理策略
说明:在调用线程池调用了 shutdown()方法后,是否继续执行现有周期任务(通过 scheduleAtFixedRate, scheduleWithFixedDelay 提交的周期任务)的策略;
boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
// 默认值为false表示线程池,关闭后不会执行周期任务.true表是会执行已经设置的周期任务
void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
List shutdownNow():
尝试停止所有正在执行的任务、暂停等待任务的处理,并返回等待执行的任务列表。对于正在运行,尝试通过中断该线程来结束线程。对于尚未运行的任务,则都不再执行。
protected RunnableScheduledFuture decorateTask(Callable callable, RunnableScheduledFuture task)
修改或替换用于执行可调用的任务
protected RunnableScheduledFuture decorateTask(Runnable runnable, RunnableScheduledFuture task)
修改或替换用于执行runnable的任务
boolean getRemoveOnCancelPolicy()
获取关于在取消时是否应立即将已取消任务从工作队列中删除的策略。
void setRemoveOnCancelPolicy(boolean value)
设置取消时取消任务是否应立即从工作队列中删除的策略。