首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么TimerTask不能重用到另一个计时器中,但是已经使用的TimerTask可以重用到ScheduledExecutorService中

TimerTask是Java中用于定时执行任务的类,而ScheduledExecutorService也是Java中用于定时执行任务的接口。虽然它们都可以用于定时执行任务,但是TimerTask不能重用到另一个计时器中,而已经使用的TimerTask可以重用到ScheduledExecutorService中的原因如下:

  1. 实现方式不同:TimerTask是基于Timer类实现的,而ScheduledExecutorService是基于线程池实现的。
  2. 线程安全性:TimerTask是非线程安全的,如果尝试将一个TimerTask对象添加到另一个计时器中,可能会导致并发问题和不可预测的行为。而ScheduledExecutorService是线程安全的,可以安全地将已经使用的任务对象重用到不同的ScheduledExecutorService中。
  3. 取消和异常处理:TimerTask的取消和异常处理机制相对较弱,一旦TimerTask抛出异常,整个Timer都会终止。而ScheduledExecutorService提供了更强大的取消和异常处理机制,可以更好地控制任务的执行。

综上所述,虽然TimerTask和ScheduledExecutorService都可以用于定时执行任务,但是由于实现方式、线程安全性和取消异常处理机制的差异,TimerTask不能重用到另一个计时器中,但是已经使用的TimerTask可以重用到ScheduledExecutorService中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java定时任务

在java中一个完整定时任务需要由Timer、TimerTask两个类来配合完成。 API是这样定义他们,Timer:一种工具,线程用其安排以后在后台线程执行任务。...Timer类 在工具类Timer,提供了四个构造方法,每个构造方法都启动了计时器线程,同时Timer类可以保证多个线程可以共享单个Timer对象而无需进行外部同步,所以Timer类是线程安全。...但是由于每一个Timer对象对应是单个后台线程,用于顺序执行所有的计时器任务,一般情况下我们线程任务执行所消耗时间应该非常短,但是由于特殊情况导致某个定时器任务执行时间太长,那么他就会“独占”计时器任务执行线程...Timer缺陷 Timer缺陷 Timer计时器可以定时(指定时间执行任务)、延迟(延迟5秒执行任务)、周期性地执行任务(每隔个1秒执行任务),但是,Timer存在一些缺陷。...同时,已经被安排单尚未执行TimerTask也不会再执行了,新任务也不能被调度。故如果TimerTask抛出未检查异常,Timer将会产生无法预料行为。

2K20

定时任务最简单3种实现方法(Java)

TOP 1:Timer Timer 是 JDK 自带定时任务执行类,无论任何项目都可以直接使用 Timer 来实现定时任务,所以 Timer 优点就是使用方便,它实现代码如下: public class...:Mon Aug 17 21:44:23 CST 2020 从上述结果可以看出,当任务 1 运行时间超过设定间隔时间时,任务 2 也会延迟执行。...TOP 2:ScheduledExecutorService ScheduledExecutorService 也是 JDK 1.5 自带 API,我们可以使用它来实现定时任务功能,也就是说 ScheduledExecutorService...,当任务 1 执行时间 5s 超过了执行频率 3s 时,并没有影响任务 2 正常执行,因此使用 ScheduledExecutorService 可以避免任务执行时间过长对其他任务造成影响。...TOP 3:Spring Task 如果使用是 Spring 或 Spring Boot 框架,可以直接使用 Spring Framework 自带定时任务,使用上面两种定时任务实现方式,很难实现设定了具体时间定时任务

64750

定时任务最简单3种实现方法(超好用)

TOP 1:Timer Timer 是 JDK 自带定时任务执行类,无论任何项目都可以直接使用 Timer 来实现定时任务,所以 Timer 优点就是使用方便,它实现代码如下: public class...:Mon Aug 17 21:44:23 CST 2020 从上述结果可以看出,当任务 1 运行时间超过设定间隔时间时,任务 2 也会延迟执行。...TOP 2:ScheduledExecutorService ScheduledExecutorService 也是 JDK 1.5 自带 API,我们可以使用它来实现定时任务功能,也就是说 ScheduledExecutorService...,当任务 1 执行时间 5s 超过了执行频率 3s 时,并没有影响任务 2 正常执行,因此使用 ScheduledExecutorService 可以避免任务执行时间过长对其他任务造成影响。...TOP 3:Spring Task 如果使用是 Spring 或 Spring Boot 框架,可以直接使用 Spring Framework 自带定时任务,使用上面两种定时任务实现方式,很难实现设定了具体时间定时任务

5.2K30

界面无小事(四):来写个滚动选择器吧!

当然了, 滚动选时间也土爆了(手动尴尬), 但是比win操作方式已经有趣不少了. 而且滚动选择器我觉得还是有很多不错应用场景, 所以这次就写一个分享给大家....所以, 我们需要自己设置最小最大字号, 最小最大透明度, 这样就可以在范围内依据函数曲线变化. 差不多就是下图, 但是y是大于0....计时器是经常用到, Android里面会用Timer, TimerTask, Handler三个组合使用....思路就是Timer实例使用schedule函数, 传入TimerTask实例以及时间参数. 然后在TimerTask实例run方法让Handler实例调用sendMessage方法发送消息....如果对自定义视图不熟悉, 可以看看我之前文章. 或者google一下. 要点就是抬手时候开启计时器, 点下记录位置, 移动绘.

55920

Java并发学习之定时任务几种玩法

Java创建和玩转定时任务 定时任务,在日常工作可以说是一个算是一个常见需求场景,比如定时数据校验,数据报表输出,报警等 0....Timer&TimerTask 实现方式 使用Timer,需要借助TimerTask类,在其中书写定时任务逻辑,因为case中有一个每隔一天跑一次定时任务和一个延迟任务,所以这里用到了Timer两种定时任务使用方式...;但是希望在指定时间进行执行时,依然还是得计算初始延迟时间,和sleep使用方式差不多 上面三,是jdk本身就支持定时任务支持;总得来说,能实现你需求场景,但是不好用,还得让自己去计算delayTime.../sleepTime;讲道理,这对使用者而言,实在是不能更不友好了; 但是在另一方面,若延迟时间比较容易确认的话;或者单纯使用每隔多长时间调度一次的话,Timer和ScheduledExecutorService...使用小建议 不推荐使用 Thread#sleep方式做定时任务 如指向利用jdk实现定时任务,可以考虑 Timer 和 ScheduledExecutorService 如项目本身就利用到了Spring

1.7K100

Java定时任务6种实现方式,你知道几种?

cancal(); // 从此计时器任务队列移除所有已取消任务。 purge(); 使用示例 下面用几个示例演示一下核心方法使用。...Timer缺陷 Timer计时器可以定时(指定时间执行任务)、延迟(延迟5秒执行任务)、周期性地执行任务(每隔个1秒执行任务)。但是,Timer存在一些缺陷。...同时,已经被安排单尚未执行TimerTask也不会再执行了,新任务也不能被调度。故如果TimerTask抛出未检查异常,Timer将会产生无法预料行为。...ScheduledExecutorService定义这四个接口方法和Timer对应方法几乎一样,只不过Timerscheduled方法需要在外部传入一个TimerTask抽象任务。...Quartz是Job scheduling(作业调度)领域一个开源项目,Quartz既可以单独使用可以跟spring框架整合使用,在实际开发中一般会使用后者。

2.3K30

JavaTimer和TimerTask使用

Timer定时器实例有多种构造方法:   Timer()   创建一个新计时器。   Timer(boolean isDaemon)   创建一个新计时器可以指定其相关线程作为守护程序运行。   ...scheduleAtFixedRate方法设置,可以使run方法体代码重复执行,也就是重复执行定时任务,相当于在线程run方法体中使用一个无穷循环。   ...Timer和TimerTask使用(二) 该类YourTimerTask 是一个定时任务类,可以实例化多个定时任务实例。   ...Timer类cancel方法终止该定时器,调用purge方法该定时器队列移除所有已经取消定时任务。   ...更多可以参考帮助文档:   void cancel()   终止此计时器,丢弃所有当前已安排任务。   int purge()   从此计时器任务队列移除所有已取消任务。

86110

Java定时任务

Java 系统主要有三种方式来实现定时任务: Timer和TimerTask ScheduledExecutorService 三方框架 Quartz 下面我们一个个来看。...Timer和TimerTask 先看一个小 demo,接着我们再来分析其中原理: ? 这种方式定时任务主要用到两个类,Timer 和 TimerTask。...那么,使用上很简单,两个步骤即可,但是其中实现逻辑是怎样呢? Timer 接口 首先,Timer 接口中,这两个字段是非常核心重要: ?...整个方法逻辑我们可以总结概括一下,具体代码就不一行行分析了,因为也不难。 首先使用任务队列内置对象锁,锁住个队列。...ScheduledExecutorService定义这四个接口方法和 Timer 对应方法几乎一样,只不过 Timer scheduled 方法需要在外部传入一个 TimerTask 抽象任务

1.8K20

Java 定时任务

项目中肯定会用到使用定时任务情况,笔者就需要定时去拉取埋点数据 使用定时任务情况: 每周末凌晨备份数据 触发条件 5 分钟后发送邮件通知 30 分钟未支付取消订单 每 1 小时去拉取数据 ........Thread实现 笔试首次遇到定时任务急急忙忙想出来方法 2.1 使用 public class ThreadSchedule { public static void main(String...ScheduledExecutorService java.util.concurrent工具类,是一个多线程定时器 4.1 使用 public class ExecutorSchedule {...执行器就是定时任务,而调度中心则负责管理调用这些定时任务,调度中心也可以存储定时任务通过脚本形式(Java 是 Grovvy)免编译地实时下发到各服务执行。...界面简单方便使用,而且对代码没什么侵入性,已经能满足大部分项目的需求了,笔者如果要用定时任务也会首选 xxl-job

2.9K30

Java Timer 定时任务实现原理及缺陷分析

execute time:2017-10-16 23:02:48 从结果来看,task1 每次执行时间间隔为3秒钟,task2每次执行时间间隔也为3秒钟。 为什么会这样呢?...Timer 维护了一个TaskQueue队列,存放TimerTask任务 Timer 定义了一个线程,用于执行轮询队列Task任务,并执行。 TaskQueue结构 ?...即将要执行任务永远存放到TimerTask[1] ,(数组任务顺序,是不断调整,每次获取完任务后都会调整一次)。...ScheduledExecutorService 代替 Timer 基于上述Timer两个致命缺陷,在以后开发尽可能使用ScheduledExecutorService(JDK1.5以后)替代Timer...ScheduledExecutorService是基于线程池可以开启多个线程进行执行多个任务,每个任务开启一个线程,这样就可以避免上述两个致命缺陷。

1.2K80

5分钟搞定,实现 定时任务 五种方案!

我们在实际开发,多多少少都会用到定时任务来处理一些问题。 比如金融项目中对账,每天定时对昨天账务进行核对,每个月初对上个月账务进行核对等。...学习资料:0 基础 Java 自学之路(配套教程) 常规实现方案 方案1:Timer 这个目前在项目中用得较少,直接贴demo代码。 具体介绍可以查看api ,但是在某些框架是有用到。...: 从提示可以看出,在多线程并行处理定时任务时,Timer运行多个TimerTask时,只要有其中之一没有捕获抛出异常,其他任务会自动终止运行。...quartz 定时任务 这是我 quartz 定时任务 这是我 quartz 定时任务 其他方案 我们在项目,可能会涉及动态调整定时任务执行core表达式、动态关闭开启定时任务,我们可以使用SchedulingConfigurer...但是资源有限,必须对资源进行控制,首先就是限制服务线程最大数目,其次考虑以线程池共享服务线程资源,降低频繁创建、销毁线程消耗;然后任务调度信息存储包括运行次数、调度规则以及运行数据等。

43960

JAVA实现定时器功能

在接口开发时,有一种开发模式叫定时器模式,可以理解为每经过一段预设时间就会执行一次事件,而在我们工作,这个事件所实现功能一般是将两个系统数据信息进行同步,这样就实现了两个系统通过接口进行对接功能...Timer类 在工具类Timer,提供了四个构造方法,每个构造方法都启动了计时器线程,同时Timer类可以保证多个线程可以共享单个Timer对象而无需进行外部同步,所以Timer类是线程安全。...但是由于每一个Timer对象对应是单个后台线程,用于顺序执行所有的计时器任务,一般情况下我们线程任务执行所消耗时间应该非常短,但是由于特殊情况导致某个定时器任务执行时间太长,那么他就会“独占”计时器任务执行线程...Timer缺陷 Timer计时器可以定时(指定时间执行任务)、延迟(延迟5秒执行任务)、周期性地执行任务(每隔个1秒执行任务),但是,Timer存在一些缺陷。...同时,已经被安排单尚未执行TimerTask也不会再执行了,新任务也不能被调度。故如果TimerTask抛出未检查异常,Timer将会产生无法预料行为。

1.1K10

(80) 定时任务那些坑 计算机程序思维逻辑

在Java,有两种方式实现定时任务: 使用java.util包Timer和TimerTask 使用Java并发包ScheduledExecutorService 它们基本用法都是比较简单...死循环 一个Timer对象只有一个Timer线程,这意味着,定时任务不能耗时太长,更不能是无限循环,看个例子: public class EndlessLoopTimer { static class...小结 可以看到,Timer/TimerTask基本使用是比较简单,但我们需要注意: 背后只有一个线程在运行 固定频率任务被延迟后,可能会立即执行多次,将次数补够 固定延时任务延时相对是任务执行前时间...不要在定时任务中使用无限循环 一个定时任务未处理异常会导致所有定时任务被取消 ScheduledExecutorService 接口和类定义 由于Timer/TimerTask一些问题...小结 本节介绍了Java定时任务两种实现方式,Timer和ScheduledExecutorService,需要特别注意Timer一些陷阱,实践建议使用ScheduledExecutorService

1.2K90

定时任务常见实现方式

其中Timer是一种工具,线程用其安排在后台线程执行任务,可安排任务执行一次或者定期重复执行;而TimerTask是由Timer安排执行一次或者重复执行任务。...线程是不会捕获异常,如果TimerTask抛出未检查异常则会导致Timer线程终止,同时Timer也不会重新恢复线程执行,它会错误认为整个Timer线程都会取消,已经被安排但尚未执行TimerTask...使用ScheduledExecutorService优化: ? 运行结果为: ? 2.Timer第二个缺陷 ? 运行结果为: ? 可以看到,timerOne抛出异常,而timerTwo并没有执行。...3.ScheduledExecutorService小结 可以看到针对Timer类存在两个缺陷,ScheduledExecutorService可以很好地解决,其思路主要在于每一个被调度任务都是由线程池中一个线程去执行...无特定值,通常和其他指定值一起使用,表示必须显示该值但不能检查 - 范围 , 列分隔符,可以指定一系列值 / 增量,表示一个值增量 L 表示Last,在日期和星期域中表示有所不同。

1.3K20

Timer和TimerTask详解

Timer是线程安全,此类可扩展到大量同时安排任务(存在数千个都没有问题)。其所有构造方法都启动计时器线程。可以调用cancel() 终止此计时器,丢弃所有当前已安排任务。...purge()从此计时器任务队列移除所有已取消任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。...Timer主要有两个数据结构,一个是使用最小堆数据结构实现队列,另一个是调度任务执行线程 2. 线程执行逻辑是一个死循环 a....在使用Timer时注意TimerTask里面函数异常捕捉,出现异常危害很大 2. Timer不能保证TimerTask按照指定时间执行… 3....如果我们想让这个程序正好在3秒以后终止,无论哪一个beep因为什么原因被延时,那么我们需要使用 scheduleAtFixedRate方法,这样当第一个beep迟到时,那么后面的beep就会以最快速度紧密执行

1K20

定时器有几种实现方式?

,工作效率,数据结构…简单上手使用一个框架,并不能体现出个人水平,如何与他人构成区分度?...接着再聊聊第一个话题:探讨一些优秀定时器实现方案。 2 理解定时器 很多场景会用到定时器,例如 使用 TCP 长连接时,客户端需要定时向服务端发送心跳请求。 财务系统每个月月末定时生成对账单。...,按照 expireTime 查找合适位置即可;Cancel O(1) ,任务在 Cancel 时,会持有自己节点引用,所以不需要查找其在链表中所在位置,即可实现当前节点删除,这也是为什么我们使用双向链表而不是普通链表原因是...其中 Timer 负责设定 TimerTask起始与间隔执行时间。使用者只需要创建一个 TimerTask 继承类,实现自己 run 方法,然后将其丢给 Timer 去执行即可。...,前面我们已经介绍过了堆这个数据结构特点。

4.4K30

学会这10种定时任务,我有点飘了

当然你也可以把后面的执行java程序命令写成shell脚本,更方便维护。 使用这种定时任务支持方便修改定时规则,有界面可以统一管理配置各种定时脚本。...方法,在该方法实例化TimerTask类,业务逻辑写在run方法。...并且如果TimerTask抛出RuntimeException,Timer会停止所有任务运行,所以阿里巴巴开发者规范不建议使用它。...假设前期工作已经OK了,接下来我们需要: 第一步,在pom.xml文件引入xxl-job相关依赖。...主要特点如下: 分布式调度协调 弹性扩容缩容 失效转移 错过执行作业触发 作业分片一致性,保证同一分片在分布式环境仅一个执行实例 自诊断并修复分布式不稳定造成问题 支持并行调度 整体架构图: image.png

2.7K11
领券