任务调度之Timer与TimerTask配合
2024-09-12 21:01:33
什么是任务调度?
在实际业务中,我们经常需要定时、定期、或者多次完成某些任务,对这些任务进行管理,就是任务调度。任务调度与多线程密切相关。
任务调度有多种方式
Timer与TimerTask配合
Timer 定时器,能在主线程外另起线程完成任务。
TimerTask 实现Runnable接口的抽象类,相当于一个任务。
来一个简单的例子:
import java.util.Timer;
import java.util.TimerTask; public class TestTimer { public static void main(String args[]){
new Reminder(3);
System.out.println("调度完成。");
} public static class Reminder{
Timer timer; public Reminder(int sec){
timer = new Timer();
//开始调度任务
timer.schedule(new TimerTask(){
public void run(){
System.out.println("时间到!");
//重要:终止内部线程!
timer.cancel();
}
}, sec*1000);
}
}
}
会输出:
调度完成。
时间到!
原理:Timer的构造函数里会起一个单独的线程(new Thread())来执行计划任务,并在任务完成后结束线程。
Timer如何终止内部线程?
1、调用timer的cancle方法(最常用,如上例)
2、把timer线程设置成daemon线程,(new Timer(true)创建daemon线程),在jvm里,如果所有用户线程结束,那么守护线程也会被终止,不过这种方法一般不用。
3、当所有任务执行结束后,删除对应timer对象的引用,线程也会被终止。
4、调用System.exit方法终止程序
注意点:
1、每一个Timer仅对应唯一一个线程。
2、Timer不保证任务执行的十分精确。
3、Timer类的线程安全的。
最新文章
- Ajax的js库分析简化版
- 【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- Node.js入门教程:Node.js如何安装配置并部署第一个网站
- SRM 146 DIV1 800
- TinyFrame升级之三:逻辑访问部分
- elementar OS体验
- -bash: wget: command not found的两种解决方法
- 【HDU 1757】 A Simple Math Problem
- 看来要学 Asp.Net 了
- YASKAWA电机控制(2)---调试
- myloader原理0
- php-redis扩展模块安装记录
- Python自动化运维之4、格式化输出、文件对象
- COJ 0979 WZJ的数据结构(负二十一)
- 介绍两个Android不常用的Drawable:GradientDrawable和 StateListDrawable
- Longest Palindromic Substring2015年6月20日
- bzoj 5297: [Cqoi2018]社交网络
- swust oj 1010
- x86服务器MCE(Machine Check Exception)问题
- jira安装插件svn
热门文章
- POJ_3616_Milking Time
- Jmeter(十五)_上传与下载
- 伪列ROWNUM、ROWID部分用法
- es match、match_phrase、query_string和term的区别
- nodejs(四)file System模块 解决Cross device link错误 EXDEV
- os模块学习+open行数
- /etc/issue 查看系统版本号
- laravel教程入门笔记
- SSH进行登录远程主机,实验室网站,项目
- phpstorm中FTP自动同步功能