📅  最后修改于: 2023-12-03 15:34:51.407000             🧑  作者: Mango
ScheduledThreadPoolExecutor
类是ExecutorService
接口的扩展,用于调度执行任务。它允许您按指定的初始延迟和周期执行任务。该类创建了一个线程池,其中的线程可以重复执行给定的任务,或仅执行一次。
创建一个ScheduledThreadPoolExecutor对象,然后使用scheduleAtFixedRate
方法或scheduleWithFixedDelay
方法安排重复执行任务,或使用schedule
方法安排一次性执行任务。
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// 重复执行任务
}
}, 0, 1, TimeUnit.SECONDS);
executor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
// 延迟执行任务
}
}, 0, 1, TimeUnit.SECONDS);
executor.schedule(new Runnable() {
@Override
public void run() {
// 一次性执行任务
}
}, 1, TimeUnit.SECONDS);
corePoolSize
:线程池中的核心线程数。maximumPoolSize
:线程池中的最大线程数。keepAliveTime
:非核心线程在终止之前等待新任务的最长时间。unit
:keepAliveTime
的时间单位。ThreadFactory
:线程工厂,用于创建新线程。RejectedExecutionHandler
:当队列和线程池都满时,用于处理新任务的拒绝策略。scheduleAtFixedRate
: 安排一个以固定速率执行的周期性任务。scheduleWithFixedDelay
: 安排一个以固定延迟执行的周期性任务。schedule
: 安排一次性执行的任务。shutdown
: 向线程池中的所有任务发出关闭请求,但不会阻止执行任务。在终止前允许执行以前提交的任务。shutdownNow
: 尝试停止所有正在执行的任务,并且停止等待执行的任务的处理。这个方法只是尝试停止任务,并不保证一定能停止所有正在执行的任务。ScheduledThreadPoolExecutor
类非常适合在固定延迟或周期下执行重复任务,特别是在需要调度多个任务时。它还提供了灵活的线程池配置和任务控制,可以简化开发人员的工作,提高代码的可读性和可维护性。