任务调度的几种Java实现

Timer

使用java.util.Timer是最简单的一种实现任务调度的方法,直接上栗子??:

 1 package Timer;
 2
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5
 6 /**
 7  * Created by zhengbin06 on 16/9/11.
 8  */
 9 public class TestTimer extends TimerTask{
10     private String jobName = "";
11
12     public TestTimer(String jobName) {
13         super();
14         this.jobName = jobName;
15     }
16
17     @Override
18     public void run() {
19         System.out.println("execute " + jobName);
20     }
21
22     public static void main(String[] args) {
23         /** 用java.util.Timer来实现任务调度 **/
24         Timer timer = new Timer();
25         long delay1 = 1 * 1000;
26         long period1 = 1 * 1000;
27         //从现在开始 1 秒钟之后,每隔 1 秒钟执行一次 job1
28         timer.schedule(new TestTimer("job1"), delay1, period1);
29
30         long delay2 = 2 * 1000;
31         long period2 = 2 * 1000;
32         // 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 job2
33         timer.schedule(new TestTimer("job2"), delay2, period2);
34
35     }
36 }

使用 Timer 实现任务调度的核心类是 Timer 和 TimerTask。其中 Timer 负责设定 TimerTask 的起始与间隔执行时间。使用者只需要创建一个 TimerTask 的继承类,实现自己的 run 方法,然后将其丢给 Timer 去执行即可。

Timer 的设计核心是一个 TaskList 和一个 TaskThread。Timer 将接收到的任务丢到自己的 TaskList 中,TaskList 按照 Task 的最初执行时间进行排序。TimerThread 在创建 Timer 时会启动成为一个守护线程。这个线程会轮询所有任务,找到一个最近要执行的任务,然后休眠,当到达最近要执行任务的开始时间点,TimerThread 被唤醒并执行该任务。之后 TimerThread 更新最近一个要执行的任务,继续休眠。

Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。

时间: 2024-08-08 09:38:55

任务调度的几种Java实现的相关文章

4种Java引用浅解

近期研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档.代码以及几篇文章.做个小结,如有错误,欢迎指正. 之所以想学习一下Java的几种引用类型,原因有两个: 理解Java Cache实现.学习Java引用与Java垃圾回收机制的关系 内存资源是有限的,须要合理的利用.Cache不是只HashMap那么简单,Java引用与Java垃圾回收机制也有很紧密的关系. 避免对Java引用的错误使用 某个同事把5000+交易数据放到一个HashMap

[JAVA]十四种Java开发工具点评

作者:兄弟连 在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4

浅解四种Java引用

最近研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档.代码以及几篇文章.做个小结,如有错误,欢迎指正. 之所以想学习一下Java的几种引用类型,原因有两个: 理解Java Cache实现.学习Java引用与Java垃圾回收机制的关系 内存资源是有限的,需要合理的利用.Cache不是仅仅HashMap那么简单,Java引用与Java垃圾回收机制也有非常紧密的关系. 避免对Java引用的错误使用 某个同事把5000+交易数据放到一个HashM

9种Java单例模式详解(推荐)

单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外部需要创建实例化对象时再进行实例化,进而达到Lazy Loading 的效果. 通过静态方法 getSingleton() 和private 权限构造方法为创建一个实例化对象提供唯一的途径. 不足:未考虑到多线程的情况下可能会存在多个访问者同时访问,发生构造出多个对象的问题,所以在多线程下不可用这种

java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫

获取[下载地址]   QQ: 313596790   [免费支持更新] 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器(开发利器)+快速构建表单;            QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连接池druid;

java-分布式任务调度的两种方式

在以往的项目开发中,分布式任务调度从 代码控制 到数据库 控制的过渡..... 第一种方式:扩展spring 的 CronTriggerBean,将  属性注入进去 先来看一段代码: 1 package com.lixiaodao.task.quartz; 2 3 import java.text.ParseException; 4 import java.util.Map; 5 6 import org.slf4j.Logger; 7 import org.slf4j.LoggerFactor

java sql编辑器 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫 java代码生成器

A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全权限框架shiro  Shiro 是一个用 Java 语言

详解三种java实现多线程的方式

java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class thread1 extends Thread {    public void run() {        for (int i = 0; i < 10000; i++) {            System.out.println("我是线程"+

四种java代码静态检查工具

[转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 »   简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码