线程池执行定时任务

定时任务用schedule线程池决定,故用Executors类生成的的定时任务皆是SchduledExecutorService服务实现。
在这里插入图片描述
ScheduledExecutorService是实现了ExecutorService接口

ScheduledExecutorService里有四种方法

delay : 延迟几秒运行 TimeUnit : 时间单位。 1000毫秒 = 1秒
在这里插入图片描述
重载方法schedule唯一可以利用返回值callable接口的。可以scheduleFuture.get()获取返回值
在这里插入图片描述
运行:
初始的initialDelay 周期period。
if (延迟时间 > 运行时间)
初始时间 + 延迟时间
else {
初始时间 + 运行时间
}

在这里插入图片描述
运行:初始时间 + 运行时间 + 延迟时间
在这里插入图片描述

测试scheduleAtFixedRate() 与scheduleWithFixedDelay()

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd : hh:mm:ss");
                try {
                    sleep(6000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(simpleDateFormat.format(new Date()));
            }
        }, 1000,5000, TimeUnit.MILLISECONDS);

在这里插入图片描述

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
            @Override
            public void run() {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd : hh:mm:ss");
                try {
                    sleep(6000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(simpleDateFormat.format(new Date()));
            }
        }, 1000,5000, TimeUnit.MILLISECONDS);

在这里插入图片描述
总结:假如线程执行时间大于间隔时间,故间隔时间会变为执行时间。故得知线程以串行运行。而scheduleWithFixedDelay是默认执行时间+间隔时间后执行线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值