ScheduledThreadPoolExecutor 源码分析

1. ScheduledThreadPoolExecutor 的使用

一段简单的代码例子

public static void main(String[] args) {
   
   
    ScheduledExecutorService executor = Executors.newScheduledThreadPool(10);
    executor.schedule(() -> {
   
   
        System.out.println("schedule task is running....");
        return "schedule task done";
    }, 10, TimeUnit.SECONDS);
    System.out.println("main thread run here.");
    executor.shutdown();
}

其运行结果如下:

main thread run here.
schedule task is running....

2. 源码分析

ScheduledExecutorService executor = Executors.newScheduledThreadPool(10); // 实际返回的便是 ScheduledThreadPoolExecutor

而 ScheduledThreadPoolExecutor 实际是 ThreadPoolExecutor 的子类,在其设计基础上扩展了定时能力,与 ThreadPoolExecutor 不同的是,ScheduledThreadPoolExecutor 内的 workQueue 采用的是 DelayedWorkQueue,一个 BlockingQueue 实现,但支持定时能力,内部实现更类似 DelayQueue。

public ScheduledThreadPoolExecutor(int corePoolSize) {
   
   
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue());
}

接下来我们看核心逻辑,即schedule方法的逻辑:

public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {
   
   
    if (command == null || unit == null)
        throw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值