TimerTask类和Timer类的cancel()方法详解
来源:互联网 发布:团队复制优化方案 编辑:程序博客网 时间:2024/06/05 22:47
无论是TimerTask类还是Timer类,其cancel()方法都是为了清除任务队列中的任务。虽然都是清除任务队列中的任务,却有一些不同:TimerTask类中的cancel()方法侧重的是将自身从任务队列中清除,其他任务不受影响,而Timer类中的cancel()方法则是将任务队列中全部的任务清空。下面以具体示例进行演示。
TimerTask类中的cancel()方法测试:
import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Test { public static void main(String[] args) throws InterruptedException { System.out.println("当前时间为:" + new Date()); Calendar c = Calendar.getInstance(); Date runDate1 = c.getTime(); System.out.println("计划时间为:" + runDate1); MyTaskA task1 = new MyTaskA(); MyTaskB task2 = new MyTaskB(); Timer timer = new Timer(); timer.schedule(task1, runDate1, 4000); timer.schedule(task2, runDate1, 4000); }}class MyTaskA extends TimerTask { @Override public void run() { System.out.println("A run timer=" + new Date()); this.cancel();// 调用的是TimerTask类中的cancel()方法 System.out.println("A任务自己移除自己,B任务不受影响,继续运行"); }}class MyTaskB extends TimerTask { @Override public void run() { System.out.println("B run timer=" + new Date()); }}
运行结果如图 5-1所示:
图 5-1 TimerTask类中的cancel()方法测试结果
Timer类中的cancel()方法测试:
import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Test { public static void main(String[] args) throws InterruptedException { System.out.println("当前时间为:" + new Date()); Calendar c = Calendar.getInstance(); Date runDate1 = c.getTime(); System.out.println("计划时间为:" + runDate1); MyTaskA task1 = new MyTaskA(); MyTaskB task2 = new MyTaskB(); Timer timer = new Timer(); timer.schedule(task1, runDate1, 4000); timer.schedule(task2, runDate1, 4000); Thread.sleep(12000); timer.cancel(); System.out.println("A、B任务都移除了"); }}class MyTaskA extends TimerTask { @Override public void run() { System.out.println("A run timer=" + new Date()); }}class MyTaskB extends TimerTask { @Override public void run() { System.out.println("B run timer=" + new Date()); }}
运行结果如图 5-2所示:
图 5-2 Timer类中的cancel()方法测试结果
**注意:**Timer类中的cancel()方法有时不一定会停止计划任务,而是正常执行。下面以一个示例进行说明:
import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Test { public static void main(String[] args) throws InterruptedException { int i = 0; Calendar c = Calendar.getInstance(); Date runDate1 = c.getTime(); System.out.println("仍然有任务没有被移除"); while (true) { i++; Timer timer = new Timer(); MyTaskA task1 = new MyTaskA(i); timer.schedule(task1, runDate1); timer.cancel(); } }}class MyTaskA extends TimerTask { private int i; public MyTaskA(int i) { super(); this.i = i; } @Override public void run() { System.out.println("第" + i + "次没有被cancel取消"); }}
运行后部分结果如图 5-3 所示:
图 5-3 并没有清空队列中的全部任务
原因是Timer类中的cancel()方法有时并没有抢到queue锁,则让TimerTask类中的任务正常执行。
阅读全文
0 0
- TimerTask类和Timer类的cancel()方法详解
- Timer和TimerTask 方法详解
- Timer和TimerTask类
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- Timer和TimerTask类的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- 传统的计时器:Timer和TimerTask类
- 腾讯云java服务器端集成 账号关系 单聊消息 消息推送 关系链管理
- Scoket_TCP_Unity聊天室
- 【学习分享】温水里的程序员,技术将成为温水。
- IOCTL获取和配置IP地址/子网掩码/网关
- 对文件信息进行合并
- TimerTask类和Timer类的cancel()方法详解
- PHP curl_init函数——爬虫必备
- note1
- ionic开发APP更新方法以及打包(Android && IOS)
- JS将数字转化为货币格式
- PHP4 PDO
- C++ CLI简介(什么是C++ CLI)
- 工作设置内存与内存专用工作集 区分
- VLC做RTSP服务器,自己写客户端与服务器命令交互demo