时光机关:探秘Java中的Timer和TimerTask

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

时光机关:探秘Java中的Timer和TimerTask

    • 前言
    • Timer和TimerTask的基本概念
      • Timer:
      • TimerTask:
      • 为何它们是 Java 中任务调度的得力工具:
    • Timer的使用方法
      • 创建和基本配置:
      • 定时任务的添加与取消:
    • TimerTask的实现与应用
      • TimerTask 的编写规范:
      • 使用 TimerTask 执行具体任务:
      • 注意事项:
    • Timer的优势与劣势
      • 优势:
      • 局限性与风险:

前言

时间是一位无情的艺术家,而在编程世界中,我们有幸能够通过Java中的Timer和TimerTask来操控时间的流逝。这就像是拥有一把神奇的时光机关,能够指挥任务在特定时刻执行。让我们一同揭开这时光机关的神秘面纱,探索其中蕴含的奥秘。

Timer和TimerTask的基本概念

TimerTimerTask 是 Java 标准库中用于任务调度的两个类,它们的基本概念如下:

Timer:

  • 定义: Timer 是一个用于安排指定任务在未来执行的工具类。它允许你指定延迟时间,以及执行任务的时间间隔。

  • 基本用途: Timer 主要用于执行重复性任务或者在一段延迟之后执行任务。它提供了计划执行任务的能力,使得你可以在指定的时间点执行某个任务,也可以周期性地执行任务。

TimerTask:

  • 定义: TimerTask 是一个抽象类,实现了 Runnable 接口。它表示一个可以由 Timer 执行的任务。

  • 基本用途: TimerTask 用于封装要执行的任务逻辑,它的 run() 方法中包含了具体的任务代码。通过继承 TimerTask,你可以创建自己的任务类,然后由 Timer 来调度执行。

为何它们是 Java 中任务调度的得力工具:

  1. 简单易用: TimerTimerTask 提供了一个相对简单的 API,使得任务调度变得易于实现。通过创建 TimerTask 的子类并使用 Timer 调度,可以轻松地安排任务的执行。

  2. 定时任务: 它们支持对任务的定时调度,即在未来的某个时间点执行任务。这对于需要周期性执行任务或者在特定时间执行任务的场景非常有用。

  3. 轻量级: TimerTimerTask 是 Java 标准库的一部分,因此它们是轻量级的工具。不需要引入额外的库或框架,即可完成基本的任务调度需求。

  4. 周期性执行: Timer 可以用于安排任务的周期性执行,例如每隔一定的时间间隔执行一次。这对于定时任务、定时器等场景非常有用。

尽管 TimerTimerTask 提供了一些简单和基础的任务调度功能,但在一些高级的场景中,可能会面临一些限制。例如,如果一个任务执行时间较长,可能会影响后续任务的调度。在这种情况下,使用更灵活和功能强大的调度工具,如 ScheduledExecutorService 或第三方调度框架,可能更为合适。

Timer的使用方法

Timer 类用于安排任务在未来执行,其使用方法涉及到创建、基本配置、定时任务的添加和取消。下面是 Timer 的基本使用方法:

创建和基本配置:

  1. 创建 Timer 实例:

    Timer timer = new Timer();
    
  2. 创建 TimerTask 实例(自定义任务):

    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            // 定时任务执行的逻辑
            System.out.println("Task executed at: " + new Date());
        }
    };
    

定时任务的添加与取消:

  1. 添加定时任务:

    // 在延迟一定时间后执行任务
    timer.schedule(task, 1000); // 1秒后执行
    
    // 在指定时间点执行任务
    Date executionTime = new Date(System.currentTimeMillis() + 5000);
    timer.schedule(task, executionTime); // 5秒后执行
    
  2. 周期性执行任务:

    // 在延迟一定时间后,每隔一定时间执行任务
    timer.schedule(task, 1000, 2000); // 1秒后开始执行,每2秒执行一次
    
  3. 取消定时任务:

    TimerTask taskToCancel = ...; // 需要取消的任务实例
    taskToCancel.cancel(); // 取消任务
    
  4. 关闭 Timer

    timer.cancel(); // 关闭Timer,取消所有已安排但尚未执行的任务
    

注意事项:

  • 当使用 schedule 方法添加任务时,如果任务抛出未捕获的异常,Timer 将终止执行所有已安排的任务。因此,在任务中要进行异常处理,以确保不会导致 Timer 终止。
  • Timer 不适用于需要精确控制的场景,因为它是单线程的,如果一个任务的执行时间过长,可能会影响后续任务的调度。
  • 如果需要更灵活的任务调度和管理,可以考虑使用 ScheduledExecutorService 接口,它提供了更丰富的功能和更好的控制能力。

总体而言,Timer 是一个简单的定时任务调度工具,适用于一些基本的任务调度需求。在一些复杂或高级的场景中,可能需要考虑使用其他调度工具。

TimerTask的实现与应用

TimerTask 是一个抽象类,实现了 Runnable 接口,用于表示可以由 Timer 调度执行的任务。以下是 TimerTask 的实现规范和使用方法:

TimerTask 的编写规范:

  1. 继承 TimerTask 类: 创建一个类并继承 TimerTask

    import java.util.TimerTask;
    
    public class MyTask extends TimerTask {
        @Override
        public void run() {
            // 任务执行的逻辑
            System.out.println("Task executed at: " + System.currentTimeMillis());
        }
    }
    
  2. 重写 run 方法:run 方法中编写任务的具体逻辑。这个方法将在定时任务执行时被调用。

  3. 异常处理:run 方法中处理可能发生的异常,确保不会导致 Timer 终止执行所有已安排的任务。

使用 TimerTask 执行具体任务:

  1. 创建 Timer 实例:

    import java.util.Timer;
    
    Timer timer = new Timer();
    
  2. 创建 TimerTask 实例:

    TimerTask myTask = new MyTask();
    
  3. 安排任务的执行:

    • 在延迟一定时间后执行任务:

      timer.schedule(myTask, 1000); // 1秒后执行
      
    • 在指定时间点执行任务:

      long executionTime = System.currentTimeMillis() + 5000;
      timer.schedule(myTask, new Date(executionTime)); // 5秒后执行
      
    • 周期性执行任务:

      timer.schedule(myTask, 1000, 2000); // 1秒后开始执行,每2秒执行一次
      
  4. 取消任务的执行:

    myTask.cancel(); // 取消任务的执行
    
  5. 关闭 Timer:

    timer.cancel(); // 关闭 Timer,取消所有已安排但尚未执行的任务
    

注意事项:

  • 任务的执行时间不应过长,以免影响后续任务的调度。
  • 尽量处理任务中可能抛出的异常,以确保不会导致 Timer 终止执行所有已安排的任务。
  • 在多线程环境中使用 TimerTimerTask 时要谨慎,可以考虑使用更现代的调度工具,如 ScheduledExecutorService

总体而言,TimerTask 提供了一种简单的方式来定义和执行定时任务,适用于一些基本的调度需求。在一些复杂或高级的场景中,可能需要考虑使用其他调度工具。

Timer的优势与劣势

优势:

  1. 简单易用: Timer 提供了一个相对简单的 API,易于上手,对于一些简单的定时任务场景,使用起来非常方便。

  2. 轻量级: Timer 是 Java 标准库的一部分,无需引入额外的库或框架,因此是一个轻量级的调度工具。

  3. 基本的定时任务调度: 对于一些简单的定时任务场景,例如在指定时间点执行任务、周期性执行任务等,Timer 能够满足基本的需求。

  4. 易于理解和调试: 由于 Timer 提供的功能相对简单,任务的添加、取消等操作都比较直观,易于理解和调试。

局限性与风险:

  1. 单线程执行: Timer 是单线程的,如果一个任务的执行时间过长,可能会影响后续任务的调度。一个长时间运行的任务会推迟后续任务的执行,因为任务是按照顺序执行的。

  2. 异常处理不足: Timer 的异常处理机制相对简单,如果一个任务抛出未捕获的异常,Timer 将终止执行所有已安排的任务,可能会导致整个调度系统的不稳定。

  3. 不适合复杂任务场景: 对于一些复杂的任务调度场景,例如需要更高级的调度策略、任务间的依赖关系等,Timer 可能显得力不从心,因为其功能相对有限。

  4. 定时器线程的生命周期管理: Timer 的定时器线程在 cancel 方法被调用后不会被及时终止,可能导致应用程序无法正常退出。需要谨慎管理定时器线程的生命周期。

  5. 不支持任务的取消和修改: 一旦定时任务被安排,就不能取消或修改其执行时间,只能取消整个定时器并重新创建。

总体而言,Timer 适用于一些简单的、单线程执行的定时任务场景,但在一些复杂、高并发或需要更高级调度功能的情况下,可能需要考虑使用其他调度工具,如 ScheduledExecutorService 或第三方调度框架。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【物联网应用案例】从0到N,智慧农业的数据价值

智慧农业全方位渗透到农业的每一个环节,云端解决方案更推动了研究人员、农艺师及农民间的密切协作,为研发企业提供了既经济又具扩展性的完美方案。 据IDC预计,到2036年,农场收集的数据量将增加800%以上,这凸显了农业数…

一款非常适合老中医用的《书剑中医电子处方软件简明版》

上了年纪的老中医,虽然经验丰富,但是电脑的基础都比较差,而开处方的软件通常又设计的太复杂,想用电脑开处方就非常困难,所以只好坚持手写开处方。最近,小编找到了一款非常简单的《书剑中医电子处方软件简明…

GPQA数据集分享

来源: AINLPer公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2024-2-28 尽管AI系统在许多任务上表现出色,但在需要大量专业知识和推理能力的任务上仍然存在局限性。为此,纽约大学的研究者提出…

ECMAScript 语法

ECMAScript 语法 一、ECMAScript1.ECMAScript简介2.ECMAScript历史 二、ECMAScript 语法区分大小写变量是弱类型的每行结尾的分号可有可无注释与 Java、C 和 PHP 语言的注释相同括号表示代码块 一、ECMAScript ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协…

西门子Mendix低代码资深技术顾问张戟,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(LowCode低码时代、RPA中国、AIGC开放社区)主办。大会旨在聚合每一位产业成员的力量,深入探索低…

【操作系统概念】 第7章:死锁

文章目录 0.前言7.1 系统模型7.2 死锁特征7.2.1 必要条件7.2.2 资源分配图 7.3 死锁处理方法7.4 死锁预防(deadlock prevention)7.4.1 互斥7.4.2 占有并等待7.4.3 非抢占7.4.4 循环等待 7.5 死锁避免(deadlock-avoidance)7.5.1 安…

NetSuite Mass Update 批量更新功能

NetSuite中有一个小而精的便捷功能,但是也是一个很容易在实践中被大家遗忘的隐藏功能,就是Mass Update批量更新,在此想和各位分享一下~该功能主要是可以帮助用户快速将符合固定标准的记录中的单个/多个字段直接进行批量更新。如果…

深度神经网络 基本知识 记录

资料:https://www.bilibili.com/video/BV1K94y1Z7wn/?spm_id_from333.337.search-card.all.click&vd_source14a476de9132ba6b2c3cbc2221750b99 计划:3~4天 注:网课讲的内容比较糅杂,记录的内容可能会出现重复 杂 人工智能…

vue3基础教程(3)——引入ui框架iview(viewui)

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 下载iview2.更新资源3.引入插件4.运行项目 专栏简介 本系列文章由浅入深,从基础知识到实战开发,非常适合入门同学。 零基础读者也能成功由本系列文章入门…

HTML开发工具和环境介绍,内附超详细的VS code安装教程!

工欲善其事必先利其器,一款好的开发工具可以让我们事半功倍。前面我们对HTML的相关概念和基本结构已经有了基本的了解,下面我们就来安装在前端开发中的需要使用的开发工具及环境。 在众多HTML编辑器中,选择一个适合自己的工具至关重要。今天…

实现的一个网页版的简易表白墙

实现的一个网页版的表白墙 实现效果 代码截图 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

计算机网络-网络应用服务器(二)

目录 1.虚拟机VM简介&#xff1a; 2.虚拟机VM几个注意事项&#xff1a; 3.Web服务器网站配置&#xff1a; 4.FTP服务器选项设置&#xff1a; 5.隔离的FTP服务器安装设置&#xff1a; 6.Apache服务器&#xff1a; 7.httpd.conf主配置文件部分内容&#xff1a; 8.虚拟主机&a…

zipkin Access denied for user ‘xxx‘@‘xxx‘ (using password: NO)

Access denied : 拒绝访问 解决方案&#xff1a; 授权 登录mysql 之后执行命令 step 1 mysql -u username -p // username: 替换成你sql 用户名step2 授权 alter user usernameip identified with mysql_native_password by password // step 3 刷新 flush privileges;

好物周刊#44:现代终端工具

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Github-Hosts 通过修改 Hosts 解决国内 Github 经常抽风访问不到&#xff0c;每日更新。 2. 餐饮点餐商城 针对…

受投资人青睐,易鑫租赁深交所再发8.10亿ABS,利率再创新低

近日&#xff0c;上海易鑫融资租赁有限公司&#xff08;以下简称“易鑫租赁”&#xff09;成功发行“天风-易鑫租赁惠民4期资产支持专项计划”&#xff0c;募集资金8.10亿元&#xff08;人民币&#xff0c;下同&#xff09;。此次发行利率再创易鑫ABS历史新低。 2023年1月&…

爬虫(四)

1.图片验证码 import requestsres requests.get(https://www.gushiwen.cn/RandCode.ashx)with open("code.png", "wb") as f:f.write(res.content)2.打码平台 网址&#xff1a;http://www.ttshitu.com/&#xff0c;找到开发文档点击Python,没有钱了要用我…

请说明Vue中的插槽复用

在前端开发中&#xff0c;Vue是一款广泛应用的JavaScript框架&#xff0c;它提供了丰富的功能和灵活性&#xff0c;使得开发者可以轻松构建交互性强大的Web应用程序。Vue中的插槽&#xff08;slot&#xff09;是一项非常有用的功能&#xff0c;能够帮助我们实现组件的复用&…

【重要!!退税!退税!】一年一度个人所得税综合年度汇算开始了!

目录标题 如何退税&#xff1f;2023年度个人所得税综合所得汇算清缴操作指南汇算准备标准申报 退税骗局&#xff1f;1.“您有一笔退税待领取”骗局2.“专业人员帮你多退税”骗局3.“诱导填报虚假个税信息”骗局4.“税务稽查人员联系你”骗局 如何退税&#xff1f; 2023年度个人…

onnx模型优化利器onnxoptimizer、onnxsim

ONNX性能优化和调试技巧 - 知乎ONNX模型是一种跨平台、跨框架的模型表示格式,允许用户在不同的深度学习框架之间共享模型和数据,从而加速模型开发和部署。然而,在实际应用中,我们通常需要对ONNX模型进行性能优化和调试,以确保其在不同硬件和…https://zhuanlan.zhihu.com/…

EXTI外部中断以及示例

中断系统 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源。比如对于外部中断来说&#xff0c;可以是引脚发生了电平跳变&#xff1b;对于定时器来说&#xff0c;可以是定时的时间到了&#xff1b;对于串口通信来说&#xff0c;可…
最新文章