Timer - 基础篇

简介: Timer - 基础篇

定时任务调度:基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行任务。

  • Timer由JDK自带,不需要引入多余的jar。
  • Quartz需要引入架包,Quartz时间控制更强大,Timer只有一个后台线程执行任务,Quartz拥有后台执行线程池能够使用多个线程执行任务。
  • 能用 Timer 处理的时候,尽量用 Timer 处理。因为 Quartz 需要的资源更多(写法也不一样)。

schedule的四种用法:

用法一:
API:schedule(task, time)
参数:task - 表示所要安排的任务,time - 表示执行任务的时间。
作用:在时间等于或超过time的时候执行且仅执行一次task。

用法二:
API:schedule(task, time, period)
参数:task - 所要安排的任务,
time - 首次执行任务的时间,period - 执行一次task的时间间隔,单位是毫秒。
作用:时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task。

用法三:
API:schedule(task, delay)
参数:task - 所要安排的任务,delay - 执行任务前的延迟时间,单位是毫秒。
作用:等待delay毫秒后执行且仅执行一次task。

用法四:
API:schedule(task, delay, period)
参数:task - 所要安排的任务,
delay - 执行任务前的延迟时间,单位是毫秒,period - 执行一次task的时间间隔,单位是毫秒。
作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task。

注意:delay属于long类型,time属于Date类型。

scheduleAtFixedRate的两种用法:

用法一:
API:scheduleAtFixedRate(task, time, period)
参数:task - 所要安排的任务
,time - 首次执行任务的时间,period - 执行一次task的时间间隔,单位是毫秒。
作用:时间等于或超过time时首次执行task
,之后每隔period毫秒重复执行一次task。

用法二:
API:scheduleAtFixedRate(task, delay, period)
参数:task - 所要安排的任务,
delay - 执行任务前的延迟时间,单位是毫秒,period - 执行一次task的时间间隔,单位是毫秒。
作用:等待delay毫秒后首次执行task,
之后每隔period毫秒重复执行一次task。

其他重要函数:

1、TimerTask的cancel(),scheduledExecutionTime()

cancel():
作用:取消当前TimerTask里的任务。

scheduledExecutionTime():
作用:返回此任务最近实际执行的已安排执行的时间。
返回值:最近发生此任务执行安排的时间,为long型。

2、Timer的cancel(),purge()
cancel():
作用:终止计时器,丢弃所有已安排的任务。

purge():
作用:从此计时器的任务队列中移除所有已取消的任务。
返回值:为从队列中移除的任务数。

schedule和scheduleAtFixedRate的区别:

区别一:

Ps1:schedule:时间回到过去,但是开始执行时以一次到达正常时间,然后间隔时间输出。

Ps2:scheduleAtFixedRate:同样时间回到过去,但是开始执行多次到达正常时间,然后间隔时间输出。

区别二:

Ps1:schedule:下次开始执行的时间以上次run方法完成时间为基准。

Ps2scheduleAtFixedRate:下次开始执行的时间以上次run方法开始时间为基准。

Timer 缺陷:

  1. 管理并发任务的缺陷
    每次有且仅有一个线程去执行定时任务,如存在多任务会导致任务时间过长(串行)
  2. 当任务抛出异常时的缺陷
    当抛出RuntimeException(如果不捕捉异常),会停止所有任务
  3. 在以下情况禁止使用
    对时效性要求较高的多任务并发作业,或者一些复杂的任务作业。
目录
相关文章
|
Java 测试技术 Windows
Jmeter 压测 ws(s)
  上一篇Jmeter压测http(s)介绍了如何使用Jmeter压测常规的web服务接口。本文将继续演示如何使用Jmeter对ws(s)进行压力测试。   有过Socket相关开发经验的人应该都不会陌生,ws协议就是WebSocket协议,而wss对应就是在SSL上运行的WebSocket协议。
2613 0
|
Kubernetes 监控 Java
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
1037 0
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
|
7月前
|
人工智能 Java 决策智能
Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现
此次官方发布的 Spring AI Alibaba OpenManus 实现,包含完整的多智能体任务规划、思考与执行流程,可以让开发者体验 Java 版本的多智能体效果。它能够根据用户的问题进行分析,操作浏览器,执行代码等来完成复杂任务等。
1472 57
|
缓存 供应链 数据库
如何确保 PUT 请求的幂等性?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务场景和系统架构选择合适的方法来实现PUT请求的幂等性,以满足应用的需求。
|
11月前
|
SQL 存储 关系型数据库
数据库的行级锁与表锁?
表锁:存储引擎在SQL数据读写请求前对涉及的表加锁,分共享读锁和独占写锁,读锁阻塞写,写锁阻塞读写,易发锁冲突,并发性低。行级锁:InnoDB支持,通过索引加锁,提高并发性,但可能引起死锁,需注意索引使用,适用于避免不可重复读场景。
199 21
|
12月前
|
前端开发 JavaScript
宏任务和微任务在浏览器渲染过程中的执行顺序
宏任务和微任务是浏览器事件循环中的两种任务类型。宏任务包括整体代码块、setTimeout等,微任务有Promise.then、MutationObserver等。每个宏任务执行完毕后,会先执行完所有微任务,再进行下一轮渲染或执行下一个宏任务。
|
人工智能 自然语言处理 前端开发
从客服场景谈:大模型如何接入业务系统
本文探讨了大模型在AI客服中的应用。大模型虽具有强大的知识生成能力,但在处理具体业务如订单咨询、物流跟踪等问题时,需结合数据库查询、API调用等手段。文章提出用Function Call连接大模型与业务系统,允许大模型调用函数获取私域知识。通过具体示例展示了如何设计系统提示词、实现多轮对话、定义Function Call函数,并利用RAG技术检索文档内容。最后,展示了该方案在订单查询和产品咨询中的实际效果。
|
JavaScript 前端开发 API
`toISOString()` 方法将日期对象转换为字符串
`toISOString()` 方法将日期对象转换为字符串
518 1
|
供应链 安全 API
常见的京东商品接口类型
京东商品接口是京东开放平台提供的一系列API,支持商品详情查询、商品搜索、评价查询、库存管理和订单处理等功能。开发者需注册获取API密钥,并按文档要求构造请求。这些接口助力开发者构建丰富的电商应用,提升用户体验。使用时需遵守平台规定,确保数据安全。
|
IDE 开发工具 开发者
isort——Python 代码中的导入语句进行排序和格式化
isort,全称是 "Import Sorting",是一个 Python 工具,用来对 Python 代码中的导入语句进行排序和格式化。它可以帮助我们按照一定的规则对导入的模块进行排序,使得代码更加整洁,易于阅读和维护。