ScheduledThreadPoolExecutor原理详解

ScheduledThreadPoolExecutor是一个可以在指定一定延迟时间后或者定时进行任务调度执行的线程池。

ScheduledThreadPoolExecutor继承了ThreadPoolExecutor并实现了ScheduledExecutorService接口。线程池队列是DelayedWorkQueue,其和DelayedQueue类似,是一个延迟队列。

三个重要方法:

schedule(Runnable command, long delay, TimeUnit unit)方法

该方法的作用是提交一个延迟执行的任务,任务从提交时间算起延迟单位位unit的delay时间后开始执行。提交的任务不是周期性任务,任务只会执行一次。

scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)方法

该方法的作用是,当任务执行完毕后,让其延迟固定时间后再次运行(fixed-delay任务)。其中initialDelay表示提交任务后延迟多少时间开始执行任务command,delay表示当任务执行完毕后延长多少时间后再次运行command任务,unit是initialDelay和delay的时间单位。任务会一直重复运行直到任务中抛出了异常,被取消了,或者关闭了线程池。

scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)方法

该方法相对起始时间点以固定频率调用指定的任务(fixed-rate任务)。当把任务提交到线程池并延迟initialDelay时间后开始执行任务command。然后从initialDelay+period时间点再次执行,而后在initialDelay+2*period时间点再次执行,循环往复,直到抛出异常或者调用了任务的cancel方法取消了任务,或者关闭了线程池。

相对于fixed-delay任务来说,fixed-rate方式执行规则为,时间为initdelday+n*period时启动任务,但是如果当前任务还没有执行完,下一次执行任务的时间到了,则不会并发执行,下次要执行的任务会延迟执行,要等到当前任务执行完毕后在执行。

总结:

ScheduledThreadPoolExecutor内部使用DelayQueue来存放具体任务。任务分为三种,其中一次性执行任务执行完毕就结束了,fixed-delay任务保证同一个任务在多次执行之间间隔固定时间,fixed-rate任务保证按照固定的频率执行。任务类型使用period的值来区分。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ScheduledThreadPoolExecutorJava 中的一个线程池实现,它可以根据指定的延迟时间或定时周期执行任务。其原理主要包括以下几个方面: 1. 线程池管理:ScheduledThreadPoolExecutor 内部维护一个线程池,其中包含多个工作线程。这些工作线程可以并行执行提交的任务。 2. 任务队列ScheduledThreadPoolExecutor 使用一个任务队列来存储提交的任务。当任务被提交时,会先进入任务队列中等待执行。 3. 任务调度:ScheduledThreadPoolExecutor 使用一个调度器来控制任务的执行时间。调度器会根据任务的延迟时间或定时周期,将任务从任务队列中取出,并分配给空闲的工作线程执行。 4. 线程池调度策略:ScheduledThreadPoolExecutor 提供了不同的调度策略,可以根据需要选择合适的策略。见的调度策略包括延迟执行、周期性执行、固定延迟执行等。 5. 线程池管理和任务调度的协调:ScheduledThreadPoolExecutor 通过线程池管理和任务调度的协调,实现了对延迟执行或定时周期执行任务的支持。它会根据需要动态地创建、销毁工作线程,并将任务分配给这些工作线程执行。 总之,ScheduledThreadPoolExecutor 通过线程池管理和任务调度的机制,实现了对延迟执行或定时周期执行任务的支持。这使得开发者可以方便地控制任务的执行时间,并且可以充分利用系统资源来提高任务执行的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值