- java.lang.Object
 -  
      
- java.util.concurrent.AbstractExecutorService
 -  
        
- java.util.concurrent.ThreadPoolExecutor
 -  
          
- java.util.concurrent.ScheduledThreadPoolExecutor
 
 
 
 
-  
       
- All Implemented Interfaces:
 -  
         
Executor,ExecutorService,ScheduledExecutorService 
public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService
AThreadPoolExecutor,其可以另外调度在给定延迟之后运行的命令,或者周期性地执行。 该类优选的是Timer需要多个工作线程时,或当附加灵活性或能力ThreadPoolExecutor需要(这此类扩展)。延迟任务执行时间早于启用,但没有任何实时保证,在启用后,他们将开始。 计划执行完全相同执行时间的任务将以先进先出(FIFO)的提交顺序启用。
提交的任务在运行之前被取消,执行被抑制。 默认情况下,这样一个取消的任务在工作队列中不会自动删除,直到其延迟过去。 虽然这样可以进一步检查和监控,但也可能导致取消任务的无限制保留。 为避免这种情况,请使用
setRemoveOnCancelPolicy(boolean)在取消时立即从工作队列中删除任务。通过
scheduleAtFixedRate或scheduleWithFixedDelay安排的定期任务的连续执行不重叠。 虽然不同的执行可以通过不同的线程来执行,先前执行的效果happen-before那些随后的那些的。虽然这个类继承自
ThreadPoolExecutor,但是一些继承的调优方法对它是没有用的。 特别是因为它作为使用corePoolSize线程和无限队列的固定大小的池,对maximumPoolSize调整没有任何有用的效果。 另外,将corePoolSize设置为零或使用allowCoreThreadTimeOut几乎是一个好主意,因为这可能会使池没有线程来处理任务,只要它们有资格运行。扩展笔记:此类覆盖了
execute和submit方法,以生成内部ScheduledFuture对象来控制每个任务的延迟和调度。 为了保护功能,子类中这些方法的任何进一步覆盖都必须调用超类版本,这有效地禁用其他任务自定义。 然而,此类提供替代保护扩展方法decorateTask(每一个用于一个版本Runnable和Callable),其可以被用于定制用于执行经由输入的命令的具体任务类型execute,submit,schedule,scheduleAtFixedRate,和scheduleWithFixedDelay。 默认情况下,ScheduledThreadPoolExecutor使用扩展FutureTask的任务类型。 但是,可以使用以下形式的子类修改或替换:public class CustomScheduledExecutor extends ScheduledThreadPoolExecutor { static class CustomTask<V> implements RunnableScheduledFuture<V> { ... } protected <V> RunnableScheduledFuture<V> decorateTask( Runnable r, RunnableScheduledFuture<V> task) { return new CustomTask<V>(r, task); } protected <V> RunnableScheduledFuture<V> decorateTask( Callable<V> c, RunnableScheduledFuture<V> task) { return new CustomTask<V>(c, task); } // ... add constructors, etc. }- 从以下版本开始:
 - 1.5
 
 
-  
        
       
-  
             
Nested Class Summary
-  
               
Nested classes/interfaces inherited from class java.util.concurrent.ThreadPoolExecutor
ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.CallerRunsPolicy, ThreadPoolExecutor.DiscardOldestPolicy, ThreadPoolExecutor.DiscardPolicy 
 -  
               
 
-  
             
构造方法摘要
构造方法 Constructor 描述 ScheduledThreadPoolExecutor(int corePoolSize)创建一个新的ScheduledThreadPoolExecutor与给定的核心池大小。ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)使用给定的初始参数创建一个新的ScheduledThreadPoolExecutor。ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory)用给定的初始参数创建一个新的ScheduledThreadPoolExecutor。ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)使用给定的初始参数创建一个新的ScheduledThreadPoolExecutor。 
-  
             
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 protected <V> RunnableScheduledFuture<V>decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)修改或替换用于执行runnable的任务。protected <V> RunnableScheduledFuture<V>decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)修改或替换用于执行可调用的任务。voidexecute(Runnable command)执行command零要求延迟。booleangetContinueExistingPeriodicTasksAfterShutdownPolicy()获取关于是否继续执行现有周期性任务的策略,即使该执行者已经是shutdown。booleangetExecuteExistingDelayedTasksAfterShutdownPolicy()获取关于是否执行现有延迟任务的策略,即使该执行者已经是shutdown。BlockingQueue<Runnable>getQueue()返回此执行程序使用的任务队列。booleangetRemoveOnCancelPolicy()获取关于在取消时是否应立即将已取消任务从工作队列中删除的策略。ScheduledFuture<?>schedule(Runnable command, long delay, TimeUnit unit)创建并执行在给定延迟后启用的单次操作。<V> ScheduledFuture<V>schedule(Callable<V> callable, long delay, TimeUnit unit)创建并执行在给定延迟后启用的ScheduledFuture。ScheduledFuture<?>scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)创建并执行在给定的初始延迟之后,随后以给定的时间段首先启用的周期性动作; 也就是说,执行将在initialDelay之后开始,然后是initialDelay + period,然后是initialDelay + 2 * period,等等。ScheduledFuture<?>scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)创建并执行在给定的初始延迟之后首先启用的定期动作,随后在一个执行的终止和下一个执行的开始之间给定的延迟。voidsetContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)设置关于是否继续执行现有周期性任务的策略,即使该执行者已经是shutdown。voidsetExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)设置即使执行者已经执行shutdown是否执行现有延迟任务的shutdown。voidsetRemoveOnCancelPolicy(boolean value)设置取消时取消任务是否应立即从工作队列中删除的策略。voidshutdown()启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务。List<Runnable>shutdownNow()尝试停止所有主动执行的任务,停止等待任务的处理,并返回正在等待执行的任务列表。Future<?>submit(Runnable task)提交一个可运行的任务执行,并返回一个表示该任务的未来。<T> Future<T>submit(Runnable task, T result)提交一个可运行的任务执行,并返回一个表示该任务的未来。<T> Future<T>submit(Callable<T> task)提交值返回任务以执行,并返回代表任务待处理结果的Future。-  
               
Methods inherited from class java.util.concurrent.AbstractExecutorService
invokeAll, invokeAll, invokeAny, invokeAny, newTaskFor, newTaskFor 
-  
               
Methods inherited from interface java.util.concurrent.ExecutorService
awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated 
-  
               
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait 
-  
               
Methods inherited from class java.util.concurrent.ThreadPoolExecutor
afterExecute, allowCoreThreadTimeOut, allowsCoreThreadTimeOut, awaitTermination, beforeExecute, finalize, getActiveCount, getCompletedTaskCount, getCorePoolSize, getKeepAliveTime, getLargestPoolSize, getMaximumPoolSize, getPoolSize, getRejectedExecutionHandler, getTaskCount, getThreadFactory, isShutdown, isTerminated, isTerminating, prestartAllCoreThreads, prestartCoreThread, purge, remove, setCorePoolSize, setKeepAliveTime, setMaximumPoolSize, setRejectedExecutionHandler, setThreadFactory, terminated, toString 
 -  
               
 
 -  
             
 
-  
        
       
-  
             
构造方法详细信息
-  
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize)
创建一个新的ScheduledThreadPoolExecutor与给定的核心池大小。- 参数
 -  
              
corePoolSize- 即使空闲时仍保留在池中的线程数,除非设置了allowCoreThreadTimeOut - 异常
 -  
              
IllegalArgumentException- 如果是corePoolSize < 0 
 
-  
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory)使用给定的初始参数创建一个新的ScheduledThreadPoolExecutor。- 参数
 -  
              
corePoolSize- 即使空闲时仍保留在池中的线程数,除非allowCoreThreadTimeOut为allowCoreThreadTimeOut -  
              
threadFactory- 执行程序创建新线程时使用的工厂 - 异常
 -  
              
IllegalArgumentException- 如果是corePoolSize < 0 -  
              
NullPointerException- 如果threadFactory为空 
 
-  
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, RejectedExecutionHandler handler)用给定的初始参数创建一个新的ScheduledThreadPoolExecutor。- 参数
 -  
              
corePoolSize- 即使空闲时仍保留在池中的线程数,除非allowCoreThreadTimeOut为allowCoreThreadTimeOut -  
              
handler- 执行被阻止时使用的处理程序,因为达到线程限制和队列容量 - 异常
 -  
              
IllegalArgumentException- 如果是corePoolSize < 0 -  
              
NullPointerException- 如果handler为空 
 
-  
ScheduledThreadPoolExecutor
public ScheduledThreadPoolExecutor(int corePoolSize, ThreadFactory threadFactory, RejectedExecutionHandler handler)用给定的初始参数创建一个新的ScheduledThreadPoolExecutor。- 参数
 -  
              
corePoolSize- 要保留在池中的线程数,即使它们处于空闲状态,除非设置了allowCoreThreadTimeOut -  
              
threadFactory- 当执行者创建新线程时使用的工厂 -  
              
handler- 执行被阻止时使用的处理程序,因为达到线程限制和队列容量 - 异常
 -  
              
IllegalArgumentException- 如果是corePoolSize < 0 -  
              
NullPointerException- 如果threadFactory或handler为空 
 
 -  
 
-  
             
方法详细信息
-  
decorateTask
protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)
修改或替换用于执行runnable的任务。 此方法可用于覆盖用于管理内部任务的具体类。 默认实现只是返回给定的任务。- 参数类型
 -  
              
V- 任务结果的类型 - 参数
 -  
              
runnable- 提交的Runnable -  
              
task- 创建的执行runnable的任务 - 结果
 - 一个可以执行runnable的任务
 - 从以下版本开始:
 - 1.6
 
 
-  
decorateTask
protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)
修改或替换用于执行可调用的任务。 此方法可用于覆盖用于管理内部任务的具体类。 默认实现只是返回给定的任务。- 参数类型
 -  
              
V- 任务结果的类型 - 参数
 -  
              
callable- 提交的Callable -  
              
task- 创建用于执行可调用的任务 - 结果
 - 一个可以执行可调用的任务
 - 从以下版本开始:
 - 1.6
 
 
-  
schedule
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
说明从接口ScheduledExecutorService复制创建并执行在给定延迟后启用的单次操作。- Specified by:
 -  
              
schedule在接口ScheduledExecutorService - 参数
 -  
              
command- 要执行的任务 -  
              
delay- 从现在开始延迟执行的时间 -  
              
unit- 延迟参数的时间单位 - 结果
 - 
               一个ScheduledFuture代表待完成的任务,其 
              
get()方法将在完成后返回null - 异常
 -  
              
RejectedExecutionException- 如果该任务无法安排执行 -  
              
NullPointerException- 如果命令为空 
 
-  
schedule
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
描述从接口ScheduledExecutorService复制创建并执行在给定延迟后启用的ScheduledFuture。- Specified by:
 -  
              
schedule在接口ScheduledExecutorService - 参数类型
 -  
              
V- 可调用结果的类型 - 参数
 -  
              
callable- 执行的功能 -  
              
delay- 从现在开始延迟执行的时间 -  
              
unit- 延迟参数的时间单位 - 结果
 - 一个可用于提取结果或取消的ScheduledFuture
 - 异常
 -  
              
RejectedExecutionException- 如果该任务无法安排执行 -  
              
NullPointerException- 如果可调用为空 
 
-  
scheduleAtFixedRate
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
说明从界面ScheduledExecutorService复制创建并执行在给定的初始延迟之后,随后以给定的时间段首先启用的周期性动作; 也就是说,执行将在initialDelay之后开始,然后是initialDelay + period,然后是initialDelay + 2 * period,等等。任务执行的顺序无限期延续,直到出现以下异常完成之一:
- 任务是通过返回的未来是explicitly cancelled 。
 - 执行者终止,也导致任务取消。
 -  执行任务会引发异常。 在这种情况下,呼叫
get将返回未来将抛出ExecutionException。 
isDone()返回未来将返回true。如果任务执行时间比其周期长,则后续执行可能会迟到,但不会同时执行。
- Specified by:
 -  
              
scheduleAtFixedRate在接口ScheduledExecutorService - 参数
 -  
              
command- 执行任务 -  
              
initialDelay- 延迟第一次执行的时间 -  
              
period- 连续执行之间的时期 -  
              
unit- initialDelay和period参数的时间单位 - 结果
 -  
              一个ScheduledFuture表示一系列重复任务的等待完成。 
              未来的
get()方法将永远不会正常返回,并且在任务取消或任务执行异常终止时将抛出异常。 - 异常
 -  
              
RejectedExecutionException- 如果任务无法安排执行 -  
              
NullPointerException- if命令为空 -  
              
IllegalArgumentException- 如果周期小于或等于零 
 
-  
scheduleWithFixedDelay
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
说明从界面ScheduledExecutorService复制创建并执行在给定的初始延迟之后首先启用的定期动作,随后在一个执行的终止和下一个执行的开始之间给定的延迟。任务执行的顺序无限期延续,直到出现以下异常完成之一:
- 任务是通过返回的未来explicitly cancelled 。
 - 执行者终止,也导致任务取消。
 -  执行任务会引发异常。 在这种情况下,呼叫
get将返回未来将会抛出ExecutionException。 
isDone()对返回的未来将返回true。- Specified by:
 -  
              
scheduleWithFixedDelay在接口ScheduledExecutorService - 参数
 -  
              
command- 要执行的任务 -  
              
initialDelay- 延迟第一次执行的时间 -  
              
delay- 一个执行终止和下一个执行的开始之间的延迟 -  
              
unit- initialDelay和delay参数的时间单位 - 结果
 -  
              一个ScheduledFuture表示一系列重复任务的等待完成。 
              未来的
get()方法将永远不会正常返回,并且在任务取消或异常终止任务执行时将抛出异常。 - 异常
 -  
              
RejectedExecutionException- 如果任务无法安排执行 -  
              
NullPointerException- if命令为空 -  
              
IllegalArgumentException- 如果延迟小于或等于零 
 
-  
execute
public void execute(Runnable command)
执行command零需求延迟。 这具有相当于schedule(command, 0, anyUnit)的效果。 请注意,对shutdownNow返回的队列和列表的shutdownNow将访问零延迟的ScheduledFuture,而不是command本身。使用
ScheduledFuture对象的后果是,afterExecute始终以空的第二个Throwable参数调用,即使command突然终止。 相反,这样一个任务抛出的Throwable可以通过Future.get()获得。- Specified by:
 -  
              
execute在接口Executor - 重写:
 -  
              
execute在ThreadPoolExecutor - 参数
 -  
              
command- 要执行的任务 - 异常
 -  
              
RejectedExecutionException- 由RejectedExecutionHandler决定,如果由于执行者已被关闭,任务不能被接受执行 -  
              
NullPointerException- 如果command为空 
 
-  
submit
public Future<?> submit(Runnable task)
描述从接口ExecutorService复制提交一个可运行的任务执行,并返回一个表示该任务的未来。 未来的get方法在成功完成后将返回null。- Specified by:
 -  
              
submit在接口ExecutorService - 重写:
 -  
              
submit在AbstractExecutorService - 参数
 -  
              
task- 提交的任务 - 结果
 - 一个未来的代表,待完成任务
 - 异常
 -  
              
RejectedExecutionException- 如果不能安排任务执行 -  
              
NullPointerException- 如果任务为空 
 
-  
submit
public <T> Future<T> submit(Runnable task, T result)
说明从界面ExecutorService复制提交一个可运行的任务执行,并返回一个表示该任务的未来。 未来的get方法将在成功完成后返回给定的结果。- Specified by:
 -  
              
submit在接口ExecutorService - 重写:
 -  
              
submit在AbstractExecutorService - 参数类型
 -  
              
T- 结果的类型 - 参数
 -  
              
task- 提交的任务 -  
              
result- 结果返回 - 结果
 - 一个未来的代表,待完成任务
 - 异常
 -  
              
RejectedExecutionException- 如果该任务无法安排执行 -  
              
NullPointerException- 如果任务为空 
 
-  
submit
public <T> Future<T> submit(Callable<T> task)
描述从接口ExecutorService复制提交值返回任务以执行,并返回代表任务待处理结果的Future。 未来的get方法将在成功完成后返回任务的结果。如果您想立即阻止等待任务,您可以使用
result = exec.submit(aCallable).get();表单的result = exec.submit(aCallable).get();注意:
Executors类包括一组可以将其他常见的类似闭包的对象(例如PrivilegedAction)转换为Callable表单的方法,以便它们可以提交。- Specified by:
 -  
              
submit在接口ExecutorService - 重写:
 -  
              
submit在AbstractExecutorService - 参数类型
 -  
              
T- 任务结果的类型 - 参数
 -  
              
task- 提交的任务 - 结果
 - 一个未来的代表,待完成任务
 - 异常
 -  
              
RejectedExecutionException- 如果任务无法安排执行 -  
              
NullPointerException- 如果任务为空 
 
-  
setContinueExistingPeriodicTasksAfterShutdownPolicy
public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean value)
设置关于是否继续执行现有定期任务的策略,即使该执行者已经是shutdown。 在这种情况下,这些任务将仅在终止shutdownNow或策略设置后false时已关机。 此值默认为false。- 参数
 -  
              
value- 如果true,关机后继续,否则不要 - 另请参见:
 -  
              
getContinueExistingPeriodicTasksAfterShutdownPolicy() 
 
-  
getContinueExistingPeriodicTasksAfterShutdownPolicy
public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()
获得关于是否继续执行现有定期任务的策略,即使该执行者已经是shutdown。 在这种情况下,这些任务将仅在终止shutdownNow或策略设置后false时已关机。 此值默认为false。- 结果
 -  
              
true如果将在关机后继续 - 另请参见:
 -  
              
setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean) 
 
-  
setExecuteExistingDelayedTasksAfterShutdownPolicy
public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean value)
设置关于是否执行现有延迟任务的策略,即使该执行者已经是shutdown。 在这种情况下,这些任务只能在shutdownNow终止,或者在已经关闭后将策略设置为false后终止。 此值默认为true。- 参数
 -  
              
value- 如果是true,在关机后执行,否则不要 - 另请参见:
 -  
              
getExecuteExistingDelayedTasksAfterShutdownPolicy() 
 
-  
getExecuteExistingDelayedTasksAfterShutdownPolicy
public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()
获取关于是否执行现有延迟任务的策略,即使这个执行者已经是shutdown。 在这种情况下,这些任务只能在shutdownNow终止,或者在已经关闭后将策略设置为false之后。 此值默认为true。- 结果
 -  
              
true如果在关机后执行 - 另请参见:
 -  
              
setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean) 
 
-  
setRemoveOnCancelPolicy
public void setRemoveOnCancelPolicy(boolean value)
设置取消时取消任务是否应立即从工作队列中删除的策略。 此值默认为false。- 参数
 -  
              
value- 如果true,取消取消,否则不要 - 从以下版本开始:
 - 1.7
 - 另请参见:
 -  
              
getRemoveOnCancelPolicy() 
 
-  
getRemoveOnCancelPolicy
public boolean getRemoveOnCancelPolicy()
获取关于在取消时是否应立即将已取消任务从工作队列中删除的策略。 此值默认为false。- 结果
 -  
              
true如果取消的任务立即从队列中删除 - 从以下版本开始:
 - 1.7
 - 另请参见:
 -  
              
setRemoveOnCancelPolicy(boolean) 
 
-  
shutdown
public void shutdown()
启动有序关闭,其中先前提交的任务将被执行,但不会接受任何新任务。 如果已经关闭,调用没有额外的作用。此方法不等待以前提交的任务完成执行。 使用
awaitTermination来做到这一点。如果
ExecuteExistingDelayedTasksAfterShutdownPolicy已被设置为false,则其延迟尚未过去的现有延迟任务将被取消。 除了ContinueExistingPeriodicTasksAfterShutdownPolicy已经设置true,未来执行的定期任务将被取消。- Specified by:
 -  
              
shutdown在接口ExecutorService - 重写:
 -  
              
shutdown在ThreadPoolExecutor - 异常
 -  
              
SecurityException- 如果安全管理器存在并关闭,则ExecutorService可能会操纵调用者不允许修改的线程,因为不支持2706269494952("modifyThread")或安全管理器的checkAccess方法拒绝访问。 
 
-  
shutdownNow
public List<Runnable> shutdownNow()
尝试停止所有主动执行的任务,停止等待任务的处理,并返回正在等待执行的任务列表。 从此方法返回时,这些任务将从任务队列中排除(删除)。此方法不等待主动执行的任务终止。 使用
awaitTermination做到这一点。除了努力尝试停止处理积极执行任务之外,没有任何保证。 该实现通过
Thread.interrupt()中断任务; 任何不能响应中断的任务都可能永远不会终止。- Specified by:
 -  
              
shutdownNow在接口ExecutorService - 重写:
 -  
              
shutdownNow在ThreadPoolExecutor - 结果
 -  
              从未开始执行的任务列表。 
              该列表的每个元素都是一个
ScheduledFuture。 对于通过schedule方法之一提交的任务,该元素将与返回的ScheduledFuture相同。 对于使用execute提交的任务,元素将为零延迟ScheduledFuture。 - 异常
 -  
              
SecurityException- 如果安全管理器存在并关闭,则ExecutorService可能会操纵调用者不允许修改的线程,因为它不保留RuntimePermission("modifyThread")或安全管理器的checkAccess方法拒绝访问。 
 
-  
getQueue
public BlockingQueue<Runnable> getQueue()
返回此执行程序使用的任务队列。 访问任务队列主要用于调试和监视。 此队列可能正在使用中。 检索任务队列不会阻止排队的任务执行。这个队列的每一个元素都是一个
ScheduledFuture。 对于通过schedule方法之一提交的任务,该元素将与返回的ScheduledFuture相同。 对于使用execute提交的任务,元素将为零延迟ScheduledFuture。这个队列的迭代不能按照它们执行的顺序遍历任务。
- 重写:
 -  
              
getQueue在ThreadPoolExecutor - 结果
 - the task queue
 
 
 -  
 
 -