什么是任务调度?

在实际业务中,我们经常需要定时、定期、或者多次完成某些任务,对这些任务进行管理,就是任务调度。任务调度与多线程密切相关。

任务调度有多种方式

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类的线程安全的。

最新文章

  1. Ajax的js库分析简化版
  2. 【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
  3. Node.js入门教程:Node.js如何安装配置并部署第一个网站
  4. SRM 146 DIV1 800
  5. TinyFrame升级之三:逻辑访问部分
  6. elementar OS体验
  7. -bash: wget: command not found的两种解决方法
  8. 【HDU 1757】 A Simple Math Problem
  9. 看来要学 Asp.Net 了
  10. YASKAWA电机控制(2)---调试
  11. myloader原理0
  12. php-redis扩展模块安装记录
  13. Python自动化运维之4、格式化输出、文件对象
  14. COJ 0979 WZJ的数据结构(负二十一)
  15. 介绍两个Android不常用的Drawable:GradientDrawable和 StateListDrawable
  16. Longest Palindromic Substring2015年6月20日
  17. bzoj 5297: [Cqoi2018]社交网络
  18. swust oj 1010
  19. x86服务器MCE(Machine Check Exception)问题
  20. jira安装插件svn

热门文章

  1. POJ_3616_Milking Time
  2. Jmeter(十五)_上传与下载
  3. 伪列ROWNUM、ROWID部分用法
  4. es match、match_phrase、query_string和term的区别
  5. nodejs(四)file System模块 解决Cross device link错误 EXDEV
  6. os模块学习+open行数
  7. /etc/issue 查看系统版本号
  8. laravel教程入门笔记
  9. SSH进行登录远程主机,实验室网站,项目
  10. phpstorm中FTP自动同步功能