Timer already cancelled 或者 Task already scheduled or cancelled
关于Timer already cancelled以及Task already scheduled or cancelled问题
1、问题的原因
我们想要设置一个开关,控制定时器的状态。当我们关掉开关的时候,也就是在使用task.cancel()或者timer.cancel()来取消定时任务后再调用原来的定时任务时,可能会出现这两种错误,原因是因为每个task和timer都是一次性的消耗品,当使用cancel方法后,这个task和timer就被消耗掉了,想要再次使用就只能再次创建新的task和timer。如下:
2 、解决办法
方式一:
所有task共用一个timer。每次使用task.cancel()取消定时器,每次启动的时候,再重新new一个TimerTask。
public static void main(String[] args) throws InterruptedException {Timer timer = new Timer();TimerTask task1 = new TimerTask() {int i=0;@Overridepublic void run() {System.out.println(" abc:" + (++i));}};timer.scheduleAtFixedRate(task1, 1000 , 1000);Thread.sleep(5000);task1.cancel();
// timer.purge();
// timer = new Timer();task1 = new TimerTask() {int i=0;public void run() {System.out.println(" abc:" + (++i));}};timer.scheduleAtFixedRate(task1, 1000 , 1000);}
结果:
方式二:
每次使用Timer.cancel()取消定时器,每次启动的时候,再重新new一个TimerTask也要new一个Timer
public static void main(String[] args) throws InterruptedException {Timer timer = new Timer();TimerTask task1 = new TimerTask() {int i=0;@Overridepublic void run() {System.out.println(" abc:" + (++i));}};timer.scheduleAtFixedRate(task1, 1000 , 1000);Thread.sleep(5000);timer.cancel();timer.purge();timer = new Timer();task1 = new TimerTask() {int i=0;@Overridepublic void run() {System.out.println(" abc:" + (++i));}};timer.scheduleAtFixedRate(task1, 1000 , 1000);}
结果:
总结:这两种方式,都需要重新new TimerTask,不同的是,cancel的对象不同。如果采用方式二,cancel了Timer,就还需要new Timer()。
Tips:
方式二,不仅要调用Timer.cancel(),还需要调用Timer.purge()。
更多内容请关注微信公众号“外里科技”
官方公众号 | 外里科技 |
运营公众号 | 英雄赚 |
微信 | wxid_8awklmbh1fzm22 |
1247408032 | |
开源代码 | https://gitee.com/B_T/beimi |
Timer already cancelled 或者 Task already scheduled or cancelled相关推荐
- Java中的Timer和Timer Task详解
Java Timer&TimerTask原理分析 如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer ...
- java之 Timer 类的使用以及深入理解
最近一直在看线程知识,然后看到Timer定时器使用了线程实现的定时功能,于是了解了解: 本文 从Time类的使用和源码分析两个方面讲解: 1---Timer类使用 2---源码分析 1.Time类使用 ...
- java定时执行一次_java Timer(定时调用、实现固定时间执行)
最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...
- Java Timer、TimerTask
下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了r ...
- java.util.timer 定时任务_java.util系列源码解读之Timer定时器
Timer是jdk1.3中自带的定时任务框架系统.一个调度定时任务的工具线程类.可以执行一个只调度一次的任务也可以重复调度一个一定间隔时间的任务. 一个Timer实例就是一个调度任务调度线程.当任务队 ...
- pool(三)——Timer
1.关于Timer的三个维度 首先是 {@link java.util.Timer},这个是最外层的类,其中包含了{@link java.util.TaskQueue},这个是存放{@link jav ...
- Java 定时器 Timer 原理解析
java.util.Timer 是 Java 中的一个实用类,它可以用来安排在未来某个时间执行的任务,或者定期执行任务.它内部包含一个任务队列,用于存储要执行的 TimerTask.通过 schedu ...
- Timer与TimerTask的真正原理使用介绍
其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样: Timer timer = new Timer() ...
- java定时器-Timer和TimerTask详解
1.例子入手 package pers.growing.test;import java.util.Timer; import java.util.TimerTask;public class Mai ...
- java刷卡计时计次源码美萍_Java 定时调配 Timer 类和定任务 TimerTask 类(一篇详细且完整的源码分析以及四种简单的使用方法)...
前言 在我们日常生活中,我们常常会遇到有关计时器的事情.如商城类项目会在某年某月某日某时某分某秒进行特价活动,那么当时间到达这个时间点上的时候该事件就会触发. 1.Timer 类构造函数摘要 1 Ti ...
最新文章
- html5盒子模型作业,html5 盒子模型案例
- Can't connect to HTTPS URL because the SSL module is not available
- docker commit 发布自己的镜像
- C++学习之路: 单例模板
- spring MVC RequestMappingHandlerMapping解析
- xml.modify() 实例演示(二)
- linux中matlab,linux中Matlab编译m文件
- 无向图求割点(找桥)tarjan
- android 内核裁剪概述,Android内核的编译与裁剪
- Webpack笔记(三)——一款破产版脚手架的开发
- ROS重大功能,无线WISP和桥接
- 【NLP】huggingface阶段性学习小结
- 计算机教师的幸福,有关信息技术教师教育感言
- 声临其境,轻松几步教你把音频变成3D环绕音
- 13-JS中的面向对象
- 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...
- 读取海康威视摄像头实时显示视频流
- 线性回归基础相关公式
- [VLDB 2021]ICS-GNN_ Lightweight Interactive Community Search via Graph Neural Network
- 一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹,求它在第十次落地时共经过多少米?第十次反弹多高?