• 线程池执行定时任务


    定时任务用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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

  • 相关阅读:
    MySQL 主从复制与读写分离
    记录一次排查OOM记录 mac电脑
    [PAT练级笔记] 69 Basic Level 1069 微博转发抽奖
    ES 模块语法改为 CommonJS 模块语法的区别
    leetcode 234. 回文链表
    LoadRunner负载机和IP欺骗
    在PowerBI中提取IFC文件中的数据
    【数据结构】队列详解
    CTF-PWN-堆-【前置知识】
    Nacos 配置中心--多配置文件的优先级
  • 原文地址:https://blog.csdn.net/weixin_45229417/article/details/125483751