`
suifeng
  • 浏览: 175474 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

几种自动任务调度实现方式

阅读更多

 

下面是暂时总结的四种自动任务执行方式

直接看代码了

package job;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.impl.DirectSchedulerFactory;

/**
 * 多种方式实现任务调度
 * @author Administrator
 *
 */
public class JobTest implements Job {

	public static void main(String[] args) throws SchedulerException {
		
		jobWithQuartz(); // 使用 quartz 框架, 能实现复杂的任务调度  需要下载quartz包, 下面有路径
		
		jobWithTimer(); // 使用java的timer 能实现定时, 周期性的调度
		
		jobWithSleepInThread(); //使用线程 + sheep 实现定周期调用
		
		jobWithSleep(); // 使用无限循环+sleep 实现定时调用
	}

	/**
	 * 使用quartz 框架
	 * 
	 * 原理 
	 * 1, 指定一个执行类(实现Job接口)
	 * 2, 构造一个触发器对象 此对象指明任务执行的规则 定时,周期性等规则
	 * 3, 把前面两个给调到类(Scheduler), 以便此类调度
	 * 4, 调度类(Scheduler)的实例使用工厂方法获得
	 * 
	 * @throws SchedulerException
	 */
	public static void jobWithQuartz() throws SchedulerException {

		//构造调到工厂
		DirectSchedulerFactory schedulerFactory = DirectSchedulerFactory
				.getInstance();
		//创建调到 必须的
		schedulerFactory.createVolatileScheduler(10);
		Scheduler scheduler = schedulerFactory.getScheduler(); //获取一个实例
		
		//在此处安排任务执行的类--JobTest实现了Job接口
		JobDetail job = new JobDetail("name", "group", JobTest.class); 

		//设置任务执行规则
		SimpleTrigger trigger = new SimpleTrigger();
		trigger.setStartTime(new Date());
		trigger.setNextFireTime(new Date(
				System.currentTimeMillis() + 1000 * 60 * 60));
		trigger.setName("trigger name");//必须
		trigger.setRepeatCount(1000);
		trigger.setRepeatInterval(1000);

		scheduler.scheduleJob(job, trigger); //调到安排
		scheduler.start(); //调到开始
	}
	/**
	 * 这是quartz的上面的执行 的方, 实现Job接口
	 */
	public void execute(JobExecutionContext context)
		throws JobExecutionException {
	
		doSomething("jobWithQuartz()");
	
	}

	/**
	 * 使用java的timer实现简单执行
	 */
	public static void jobWithTimer() {
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {

				doSomething("jobWithTimer()");
			}

		}, 0, 1000); //1000执行周期(1秒)
	}
        static boolean runNext= true;
	/**
	 * 线程 + sleep + 无限循环
	 */
	public static void jobWithSleepInThread() {
		new Thread() {
			public void run() {
				for (; runNext;) {
					
					doSomething("jobWithSleepInThread()");
					
					try {
						Thread.sleep(1000L);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start(); //
	}

	/**
	 * sleep + 无限循环
	 */
	public static void jobWithSleep() {
		for (; runNext;) {
			
			doSomething("jobWithSleep()");
			
			try {
				Thread.sleep(1000L);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	
	
	public static void doSomething(String method) {
		System.out.println(method + " : " + Thread.currentThread());
	}
}

 

关于 quartz(矿石--石英)框架详解 : 

http://www.opensymphony.com/quartz/  //官方网址

http://www.ibm.com/developerworks/cn/java/j-quartz/index.html  //IBM中文介绍

 

关于timer

http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/util/Timer.html#scheduleAtFixedRate(java.util.TimerTask, java.util.Date, long)

 

1
0
分享到:
评论

相关推荐

    几种任务调度的Java实现方法与比较

    本文由浅入深介绍四种任务调度的Java实现:ScheduledExecutor开源工具包Quartz开源工具包JCronTab此外,为结合实现复杂的任务调度,本文还将介绍Calendar的一些使用方法。Timer相信大家都已经非常熟悉java.util....

    quartz的分布式调度大致分两种方式实现

    基于JDBC-Jobstore的方式实现集群(有数据库JobStoreTX或JobStoreCMT) 二.TerracottaJobStore的配置(无数据库的集群) 本文介绍的是JDBC-Jobstore基于数据库的集群: 1.目前,群集仅适用于JDBC-Jobstore...

    基于多核DSP并行调度机制的实现

    光电经纬仪是最早、最广泛应用于飞行器测控领域的光电跟踪测量设备,它 的组成部分包括大地测量光学经纬仪、激光跟踪测量系统、微机控制...本文将介绍多核 DSP 并行调度的几种方案,并以算法实例对主从模型进行分析。

    中心化的作业调度系统,定义了任务调度模型,实现了任务调度的统一管理和监控。.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    时间片轮转调度算法

    课程设计任务:进程/作业调度:时间片轮转调度算法。 1.2 课程设计要求  建立作业的数据结构描述;  使用两种方式产生作业:(a)自动产生, (b)手工输入;  在屏幕上显示每个作业的执行情况;  时间的...

    论文研究-多启发式规则融合粒子群算法的受限项目调度.pdf

    在船舶生产的现实背景上,对船舶生产过程中如何利用总装平台这一瓶颈资源...通过和其他几种主流的空间调度方法(分支界定和遗传算法)进行不同规模的实验对比,得出该算法在时间复杂度和平均资源利用率方面都有所提高。

    进程调度算法、内存管理算法、银行家算法(Java实现),可用于课设.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    爬虫tujiaminsu.rar

    网络爬虫(Web crawler),也被称为网络蜘蛛、网络机器人或网络蠕虫,是一种自动化程序,用于从互联网上自动获取大量网页信息的工具。 网络爬虫的工作方式类似于真实世界中的蜘蛛。它们会沿着网页之间的链接进行...

    爬虫kuanappshop.rar

    网络爬虫(Web crawler),也被称为网络蜘蛛、网络机器人或网络蠕虫,是一种自动化程序,用于从互联网上自动获取大量网页信息的工具。 网络爬虫的工作方式类似于真实世界中的蜘蛛。它们会沿着网页之间的链接进行...

    爬虫Demo举例python.rar

    网络爬虫(Web crawler),也被称为网络蜘蛛、网络机器人或网络蠕虫,是一种自动化程序,用于从互联网上自动获取大量网页信息的工具。 网络爬虫的工作方式类似于真实世界中的蜘蛛。它们会沿着网页之间的链接进行...

    爬虫bing-img.rar

    网络爬虫(Web crawler),也被称为网络蜘蛛、网络机器人或网络蠕虫,是一种自动化程序,用于从互联网上自动获取大量网页信息的工具。 网络爬虫的工作方式类似于真实世界中的蜘蛛。它们会沿着网页之间的链接进行...

    爬虫anjuke.rar

    网络爬虫(Web crawler),也被称为网络蜘蛛、网络机器人或网络蠕虫,是一种自动化程序,用于从互联网上自动获取大量网页信息的工具。 网络爬虫的工作方式类似于真实世界中的蜘蛛。它们会沿着网页之间的链接进行...

    操作系统算法多语言实现.zip

    主要包括进程调度算法、页面置换算法、动态分区匹配算法、磁盘调度算法。 Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计...

    车辆调度监控管理系统.zip

    管理系统,作为一种高效的企业运营管理工具,旨在通过集成化、系统化的手段,对组织内部的各类资源进行规划、协调、控制和优化,以实现企业战略目标,提升运营效率,增强核心竞争力。以下是对管理系统的详细介绍: ...

    NetTask是一款基于.net core3.0开发的的通用任务管理系统.zip

    将任务逻辑和任务调度彻底分离,并可通过Web界面远程监控和管理任务。 管理系统,作为一种高效的企业运营管理工具,旨在通过集成化、系统化的手段,对组织内部的各类资源进行规划、协调、控制和优化,以实现企业...

    JAVA毕业设计银行OA系统项目(ssm完整源码+说明)

    任务调度:银行OA系统可以协助员工及时安排和跟踪任务的完成情况,确保工作流程的顺畅进行。员工可以通过系统提醒和日历功能来及时了解任务进展和截止日期。 信息协同:银行OA系统可以促进员工之间的信息共享和协作...

    SpringBoot+Vue 企业级 智能通用报表 调度平台 管理系统.zip

    Java是一种高性能、跨平台的面向...自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。

    计算机操作系统课件及答案[汤子赢]

    单道批处理系统是最早出现的一种OS,它具有自动性,顺序性和单道性的特点; ---多道批处理系统则具有调度性,无序性和多道性的特点; b. 单道批处理系统是在解决人机矛盾及CPU和I/O设备之间速度不匹配的矛盾中形成...

    论文研究-一种分布式网络管理系统结构.pdf

    临时选举的主席根据骨干树对管理域进行自动划分,并由管理设备骨干树上的多管理设备使用简单的路由机制协同工作,完成大型网络管理几大功能域的需求,如分布式拓扑发现、多管理设备间多性能任务调度和故障通报等。

Global site tag (gtag.js) - Google Analytics