定时器详解

news2024/11/12 0:22:09

定时器是一种控制任务延时执行,或者周期执行的技术。

作用:闹钟、定时邮件发送。

定时器的两种实现方式:Timer 、ScheduledExecutorService。

Timer定时器

API

public Timer() 创建Timer定时器对象,并启动线程。

public void schedule​(TimerTask task, long delay, long period) 安排任务,按照计划处理TimerTask任务。

Timer定时器的特点和存在的问题

1、Timer是单线程,处理多个任务按照顺序执行,存在延时与设置定时器的时间有出入。

2、可能因为其中的某个任务的异常使Timer线程死掉,从而影响后续任务执行。

示例

public class TimerDemo1 {
    public static void main(String[] args) {
        // 1、创建Timer定时器
        Timer timer = new Timer();  // 定时器本身就是一个单线程。
        // 2、调用方法,处理定时任务
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行AAA~~~" + new Date());
//                try {
//                    Thread.sleep(5000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
            }
        }, 0, 2000);

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行BB~~~"+ new Date());
                System.out.println(10/0);
            }
        }, 0, 2000);

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行CCC~~~"+ new Date());
            }
        }, 0, 3000);
    }
}

ScheduledExecutorService定时器

ScheduledExecutorService是 jdk1.5中引入了并发包,目的是为了弥补Timer的缺陷, ScheduledExecutorService内部为线程池。

 ScheduledExecutorService的优点 : 基于线程池,某个任务的执行情况不会影响其他定时任务的执行。

public class TimerDemo2 {
    public static void main(String[] args) {
        // 1、创建ScheduledExecutorService线程池,做定时器
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(3);

        // 2、开启定时任务
        pool.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行输出:AAA  ==》 " + new Date());
                try {
                    Thread.sleep(100000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, 0, 2, TimeUnit.SECONDS);


        pool.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行输出:BBB  ==》 " + new Date());
                System.out.println(10 / 0);
            }
        }, 0, 2, TimeUnit.SECONDS);


        pool.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行输出:CCC  ==》 " + new Date());
            }
        }, 0, 2, TimeUnit.SECONDS);

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1249095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【五年创作纪念日】

机缘 我成为创作者的过程并不复杂,可以说是一个自然的发展。我是一名软件工程师,日常的工作主要是编程和解决问题。在工作的过程中,我发现有很多时候我需要查找一些特定的技术问题或者寻找一些最佳实践来解决我遇到的问题。在这个过程中&…

TransFusionNet:JetsonTX2下肝肿瘤和血管分割的语义和空间特征融合框架

TransFusionNet: Semantic and Spatial Features Fusion Framework for Liver Tumor and Vessel Segmentation Under JetsonTX2 TransFusionNet:JetsonTX2下肝肿瘤和血管分割的语义和空间特征融合框架背景贡献实验方法Transformer-Based Semantic Feature Extractio…

CentOS7安装Docker运行环境

1 引言 Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,…

短视频ai剪辑矩阵分发saas系统源头技术开发

抖音账号矩阵系统是基于抖音开放平台研发的用于管理和运营多个抖音账号的平台。它可以帮助用户管理账号、发布内容、营销推广、分析数据等多项任务,从而提高账号的曝光度和影响力。 具体来说,抖音账号矩阵系统可以实现以下功能: 1.多账号多…

虚拟KOL搅动“网红圈”,出海品牌该如何与其合作?

近年来,虚拟KOL已经成为了数字营销领域的一股强大力量。虚拟网红的崛起在社交媒体平台上引起了广泛的关注,其独特的吸引力和影响力使其成为了各类品牌愿意与之合作的理想伙伴。特别是对于那些试图进军国际市场的出海品牌来说,与虚拟网红合作不…

系列六、Spring整合单元测试

一、概述 Spring中获取bean最常见的方式是通过ClassPathXmlApplicationContext 或者 AnnotationConfigApplicationContext的getBean()方式获取bean,那么在Spring中如何像在SpringBoot中直接一个类上添加个SpringBootTest注解,即可在类中注入自己想要测试…

JMeter 测试脚本编写技巧

JMeter 是一款开源软件,用于进行负载测试、性能测试及功能测试。测试人员可以使用 JMeter 编写测试脚本,模拟多种不同的负载情况,从而评估系统的性能和稳定性。以下是编写 JMeter 测试脚本的步骤。 第 1 步:创建测试计划 在JMet…

【Unity】EventSystem.current.IsPointerOverGameObject()对碰撞体起作用

本来我是用 EventSystem.current.IsPointerOverGameObject()来检测是否点击在UI上的,但是发现,他对我的碰撞体也是返回ture,研究半天。。。。找不出问题,然后发现我的相机上挂载了PhysicsRaycaster,去掉之后就好了,至于…

2014年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2014 年考研管理类联考数学真题一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2014-01&…

蓝桥杯物联网竞赛_STM32L071_3_Oled显示

地位: 对于任何一门编程语言的学习,print函数毫无疑问是一种最好的调试手段,调试者不仅能通过它获取程序变量的运行状态而且通过对其合理使用获取程序的运行流程,更能通过关键变量的输出帮你验证推理的正确与否,朴素的…

12V降3.3V100mA稳压芯片WT7133

12V降3.3V100mA稳压芯片WT7133 WT71XX系列是一款采用CMOS工艺实现的三端高输入电压、低压差、小输出电流电压稳压器。 它的输出电流可达到100mA,输入电压可达到18V。其固定输出电压的范围是2.5V~8.0V,用户 也可通过外围应用电路来实现可变电压…

使用dbutil工具类查询数据表时,servlet传入sql数据 返回结果为null

使用dbutil工具类查询数据表时,servlet传入sql数据 返回结果为null 原本数据表中该有的数据却返回为空 解决办法: 在jdbc.properties配置文件中url连接里面加上utf-8字符集 urljdbc:mysql://localhost:3306/qfedu?useUnicodetrue&characterEncodi…

Maven - 打包之争:Jar vs. Shade vs. Assembly

文章目录 Pre概述Jar 打包方式_maven-jar-pluginOverview使用官方文档 Shade 打包方式_maven-shade-pluginOverview使用将部分jar包添加或排除将依赖jar包内部资源添加或排除自动将所有不使用的类排除将依赖的类重命名并打包进来 (隔离方案)修改包的后缀…

【合集一】每日一练30讲,轻松掌握Verilog语法

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 第一练:如何区分<=表示的含义? 题目:请描述以下两种方法产…

什么年代了,你还不会自动化测试?

一、前言 在软件测试中,自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后,测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的测试。…

葡萄酒怎么按照饮用时间分类?

不同的葡萄酒搭配不同的餐食,会让饮酒人有不一样的感受和体会,所以,葡萄酒是分场合并且有饮用时间的。云仓酒庄的品牌雷盛红酒分享一般按照饮用时间分类可以把葡萄酒分为三大类,分别是餐前酒、佐餐酒和餐后酒。 餐前酒&#xff1…

C++之模版初阶(简单使用模版)

前言 在学习C的模版之前,咱们先来说一说模版的概念,模版在我们的日常生活中非常常见,比如我们要做一个ppt,我们会去在WPS找个ppt的模版,我们只需要写入内容即可;比如我们的数学公式,给公式套值&…

Python监控服务进程及自启动服务方法与实践

1. 需求概述 当我们在Windows Server环境中部署XX系统的实际应用中,往往会遇到一些运维管理的挑战。为了确保系统的持续稳定运行,特别是在服务程序因各种原因突然关闭的情况下,我们可以借助Python的强大生态系统来构建一个监控与自动重启的管…

CBTC 2023氢能展倒计时6天,最新同期会议活动Plus版发布

随着时间的推移,CBTC2023深圳氢能技术展览会即将拉开序幕。这场盛会将于11月30日在深圳福田会展中心盛大开幕,以“以储赋能,智造未来”为主题,旨在搭建一个商务交流、供需合作、创新产品发布的平台,让氢能全产业链之间…