定时任务---Timer

什么是Timer      

       Timer是Java中的一个类,用于在指定的时间间隔内执行重复的任务。它可以在后台线程中运行,不影响主线程的执行。

      Timer类可以安排一个任务在未来的某个时间开始执行,或者以固定的时间间隔重复执行。它提供了一些方法来安排任务的执行,如schedule(TimerTask task, Date time)方法用于在指定的时间开始执行任务,schedule(TimerTask task, long delay)方法用于在指定的延迟时间后开始执行任务,schedule(TimerTask task, long delay, long period)方法用于在指定的延迟时间后开始执行任务,并且在之后的固定时间间隔内重复执行任务。

     Timer类还提供了一些其他方法,如cancel()方法用于取消所有已安排的任务,purge()方法用于移除所有已取消的任务。

      Timer类在一些简单的定时任务场景下非常有用,但在高级的定时任务场景下可能不太适用,因为它是基于单个线程的调度器,可能会受到任务执行时间过长或者任务互相影响的影响。

Timer的低层实现原理

    Timer的低层实现原理主要涉及到操作系统和硬件层面。

     在操作系统层面,Timer的实现依赖于操作系统提供的定时器服务。操作系统通常会提供一种方式让应用程序注册定时器事件,并指定定时器事件发生后的处理函数。当定时器事件发生时,操作系统会调用注册的处理函数。

    在硬件层面,Timer的实现通常依赖于系统时钟或硬件定时器。系统时钟是操作系统内部维护的一个计时器,用来记录系统的运行时间。硬件定时器是一个独立的硬件设备,用来生成定时中断信号。

    具体来说,当应用程序注册一个定时器事件时,操作系统会根据指定的时间间隔设置系统时钟或硬件定时器的计数值。当计数值达到设定的时间间隔时,系统会触发定时中断。定时中断会打断当前正在执行的程序,切换到定时器事件的处理函数。处理函数完成后,系统会恢复之前的程序执行。

   在实际的实现中,Timer的精度和性能取决于操作系统和硬件的支持。有些操作系统提供了高分辨率的定时器服务,可以提供微秒级的时间精度。而硬件定时器的性能则受限于硬件的能力和系统的配置。

Timer的应用场景

     Timer是一个用于安排任务的工具类,它可以在指定的时间间隔执行任务或者在指定的时间点执行任务。以下是 Timer 的一些常见应用场景:

  1. 定时任务调度:可以使用 Timer 在指定的时间点执行任务。例如,可以使用 Timer 在每天的特定时间点执行备份操作或者定时清理操作。

  2. 定时器提醒:可以使用 Timer 在指定的时间点进行提醒操作。例如,可以使用 Timer 在特定时间点提醒用户参加会议或者完成任务。

  3. 周期性任务调度:可以使用 Timer 在指定的时间间隔重复执行任务。例如,可以使用 Timer 定时发送心跳包或者定时检查数据库连接。

  4. 定时更新数据:可以使用 Timer 在指定的时间点或者时间间隔更新数据。例如,可以使用 Timer 定时从外部数据源更新数据到数据库。

       需要注意的是,Java 5 以后,推荐使用更加灵活和强大的 ScheduledExecutorService 来替代 Timer。它可以支持更多的任务调度策略,并且在处理异常和任务取消方面更加健壮。所以在实际的开发中,推荐使用 ScheduledExecutorService 进行任务调度。

Timer的案例

import java.util.Timer;
import java.util.TimerTask;public class TimerExample {public static void main(String[] args) {Timer timer = new Timer();// 创建一个定时任务TimerTask task = new TimerTask() {int count = 0;@Overridepublic void run() {count++;System.out.println("定时任务执行次数:" + count);if (count == 5) {System.out.println("定时任务执行完毕");// 取消定时任务timer.cancel();}}};// 延迟1秒后开始执行定时任务,每隔2秒执行一次timer.schedule(task, 1000, 2000);}
}

上述代码演示了如何使用Timer类创建一个定时任务。以下是对代码的详细解释:

  1. 导入TimerTimerTask类。

  2. main方法中,创建一个Timer对象。Timer类是Java提供的用于执行定时任务的工具。

  3. 创建一个TimerTask对象,并重写其run方法。TimerTask类是一个抽象类,用于表示要执行的定时任务。在run方法中定义了要执行的任务内容。

  4. run方法中,定义了一个变量count,用于记录定时任务执行的次数。

  5. run方法中,增加了判断语句,当count等于5时,打印出定时任务执行完毕,并调用timer.cancel()取消定时任务。

  6. 使用timer.schedule(task, 1000, 2000)方法将定时任务安排到Timer对象中执行。参数task表示要执行的定时任务,参数1000表示延迟1秒后开始执行定时任务,参数2000表示每隔2秒执行一次定时任务。

执行上述代码,会在控制台上输出以下内容:

定时任务执行次数:1
定时任务执行次数:2
定时任务执行次数:3
定时任务执行次数:4
定时任务执行次数:5
定时任务执行完毕

对于Timer的总结       

       Timer是一种计时器工具,用于在指定的时间间隔内执行一个或多个任务。它可以在单一线程或多个线程中运行,并且可以用于在后台执行重复或延迟的任务。

       Timer的主要用途是执行重复性任务,比如定时器任务,定时重启任务等。它通过调用一个或多个任务的run方法来执行任务,并且可以指定任务的执行时间间隔。

      Timer的优点是简单易用,并且具有可靠性和稳定性。它提供了一种简单的方式来运行预定的任务,并且可以灵活地配置任务的执行时间和间隔。

     然而,Timer也有一些缺点。最主要的是,如果一个任务的执行时间超过了指定的间隔时间,那么定时器会立即执行下一个任务,导致任务的执行时间不准确。此外,Timer是单一线程的,所以当一个任务执行时间较长时,会阻塞其他任务的执行,影响整体性能。

 

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

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

相关文章

【软件测试】学习笔记-性能测试的基本方法与应用领域

这篇文章探讨并发用户数、响应时间和系统吞吐量这三个指标之间的关系和约束,性能测试七种常用方法,以及四大应用领域。 由于性能测试是一个很宽泛的话题,所以不同的人对性能测试的看法也不完全一样,同样一种方法可能也会有不同的…

基于鸿蒙HarmonyOS 元服务开发一款公司运营应用(ArkTS API 9)

前言 最近基于Harmony OS最新版本开发了一个作品,本文来详细讲解一下,如何我是如何开发这个作品的。以及如何使用OpenHarmony,基于ArkTS,API 9来开发一个属于自己的元服务。 废话不多说,我的作品名称叫做Company Oper…

Softmax回归(多类分类模型)

目录 1.对真实值类别编码:2.预测值:3.目标函数要求:4.使用Softmax模型将输出置信度Oi计算转换为输出匹配概率y^i:5.使用交叉熵作为损失函数:6.代码实现: 1.对真实值类别编码: y为真实值&#xf…

统计学假设检验方法简单介绍

统计学的假设检验方法有以下几种: 1. 单样本 t 检验:用于检验一个样本均值是否与给定的理论值相等。 2. 独立样本 t 检验:用于比较两个独立样本的均值是否相等。 3. 配对样本 t 检验:用于比较同一组样本的两个相关变量的均值是…

【闪电侠学netty】第10章 实现客户端与服务端收发消息

【Netty】读书笔记 - 跟闪电侠学 1. 内容概要 1.1 总结 1.1.1 该章节的业务逻辑 客户端登录 -- 服务器 登录成功 -- 开启线程 -- 如果登录成功,将输入内容转换成MessageRequestPacket指令发送服务器登录重连(省略) 服务器 -- 处理 …

Python——VScode安装

⼀、下载安装 [root192 ~]# rpm --import https://packages.microsoft.com/keys/microsoft.asc[root192 ~]# sh -c echo -e "[code]\nnameVisualStudio Code\nbaseurlhttps://packages.microsoft.com/yumrepos/vscode\nenabled1\ngpgcheck1\ngpgkeyhttps://packages.mi…

PXIe‑6378国产替代,16路AI(16位,3.5 MS/s/ch),4路AO,48路DIO,PXI多功能I/O模块

PXIe,16路AI(16位,3.5 MS/s/ch),4路AO,48路DIO,PXI多功能I/O模块 PXIe‑6378是一款同步采样的多功能DAQ设备。 该模块提供了模拟 I/O、数字I/O、四个32位计数器和模拟和数字触发。 板载NI‑STC3…

Odrive 学习系列二:将烧录工具从ST-Link V2修改为JLink

一、背景: 通过观察odrive解压后的内容,可以看到在下面配置文件及makefile文件中的配置设置的均为openOCD + stlink v2,例如makefile中: # This is only a stub for various commands. # Tup is used for the actual compilation.BUILD_DIR = build FIRMWARE = $(BUILD_DI…

PCL ISS关键点提取(C++详细过程版)

边界提取 一、概述二、代码实现三、结果展示PCL ISS关键点提取(C++详细过程版)由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 ISS关键点提取在PCL里有现成的调用函数,具体算法原理和实现代码见:PCL ISS关键点提…

【软件测试】学习笔记-GUI测试稳定性的关键技术

这篇文章将从实际工程应用的角度,探讨GUI测试的稳定性问题。 GUI自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败。 这也是影响GUI测试健康发展的一个重要障碍&#x…

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(二)

引言:上一篇文章我们简单介绍了AD9129的基础知识,包括芯片的重要特性,外部接口相关的信号特性等。本篇我们重点介绍下项目中FPGA与AD9129互联的原理图设计,包括LVDS IO接口设计、时钟电路以、供电设计以及PCB设计。 LVDS数据接口设…

openssl3.2 - 官方demo学习 - encode - rsa_encode.c

文章目录 openssl3.2 - 官方demo学习 - encode - rsa_encode.c概述笔记END openssl3.2 - 官方demo学习 - encode - rsa_encode.c 概述 命令行参数 server_priv_key.pem client_priv_key.pem 这2个证书是前面certs目录里面做的 官方这个程序有bug, 给出2个证书, 还要从屏幕上输…

Python - 深夜数据结构与算法之 BloomFilter

目录 一.引言 二.BloomFilter 简介 1.Hash Table 2.Bloom Filter 3.Bloom 示意图 4.Bloom 应用 三.Bloom Filter 实现 1.Python 实现 2.Python 测试 四.总结 一.引言 布隆过滤器 BloomFilter 是位运算在工业级场景应用的典范,其通过 bit 位保存元素是否存…

【Python数据可视化】matplotlib之增加图形内容:设置图例、设置中文标题、设置网格效果

文章传送门 Python 数据可视化matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

书生·浦语大模型实战营笔记(四)

Finetune模型微调 直接使用现成的大语言模型,在某些场景下效果不好,需要根据具体场景进行微调 增量预训练:投喂垂类领域知识 陈述形式,无问答,即只有assistant 指令跟随:system-user-assistant XTuner …

springboot集成kafka消费数据

springboot集成kafka消费数据 文章目录 springboot集成kafka消费数据1.引入pom依赖2.添加配置文件2.1.添加KafkaConsumerConfig.java2.2.添加KafkaIotCustomProperties.java2.3.添加application.yml配置 3.消费者代码 1.引入pom依赖 <dependency><groupId>org.spri…

yolov7混淆矩阵

测试部分代码 import argparse import json import os from pathlib import Path from threading import Threadimport numpy as np import torch import yaml from tqdm import tqdmfrom models.experimental import attempt_load from utils.datasets import create_dataload…

10.Spring Type Convertion 原理

目录 概述Spring Type Convertion总结Spring MVC层的数据转换debug 关键断点测试代码关键处调试字符串Long结束概述 此篇文章对 Spring Type Convertion 做深入学习。 两个源码调试例子,一个是转换成 String ,一个转换成 Long 环境:spring boot 2.6.13 相关文章如下: 文章…

嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第二天-类与对象(物联技术666)

链接:https://pan.baidu.com/s/1Am83Ut449WCbuTiodwJWgg?pwd=1688 提取码:1688 上午:类和对象 下午:类和对象高级应用 教学内容: 1、构造函数\析构函数\拷贝构造函数 构造函数: 每一个对象的创建都必须初始化,如果在没有写初始化函数(即构造函数),系统会默认写…

OpenCV——八邻域断点检测

目录 一、理论基础1、八邻域2、断点检测 二、代码实现三、结果展示四、参考链接 OpenCV——八邻域断点检测由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、理论基础 1、八邻域 图1 八邻域示意图 图…