`
suifeng
  • 浏览: 181492 次
  • 性别: 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...

    【Java毕业设计】挖坑,毕业后做了几年的任务调度,想聊聊分布式任务调度系统的设计与实现,打算先用 Java 写一版.zip

    在实现过程中,有几种常见的分布式任务调度框架可供选择: - **Quartz**: 一个流行的任务调度库,支持集群和分布式任务。但其不直接支持分布式协调,需要配合其他工具如Zookeeper。 - **ElasticJob**: 基于Apache ...

    Sring最佳实践-集成任务调度服务

    在Spring框架中,任务调度是实现应用程序自动化执行特定任务的关键特性。本实践主要涉及Spring集成两种常见的任务调度库:Spring的Timer和Quartz。这两者都允许开发者在预定义的时间间隔内执行任务,极大地提高了...

    LTS分布式任务调度

    LTS由几个关键组件构成,包括任务提交客户端(TaskSubmitter)、任务调度器(TaskScheduler)、工作节点(WorkerNode)以及监控系统(Monitor)。 1. **任务提交客户端(TaskSubmitter)**:负责将用户定义的任务...

    分布式定时任务调度系统技术选型指南.docx

    分布式定时任务调度系统是现代企业级应用中不可或缺的一部分,它能够有效地协调分布在不同节点上的任务,确保任务按预定的时间间隔准确、可靠地执行。在选择适合的分布式定时任务调度系统时,我们需要考虑多个因素,...

    VIP的分布式任务调度平台

    VIP的分布式任务调度平台具备以下几个关键特性: 1. **Java和Shell Jobs**:平台支持两种主要的任务类型——Java作业和Shell脚本作业。Java Jobs允许开发人员使用Java语言编写高度复杂的业务逻辑,而Shell Jobs则...

    自动任务插件

    自动任务插件是一种软件工具,通常用于自动化执行一系列预先设定的操作,从而节省用户手动操作的时间和精力。在IT行业中,这种技术广泛应用于各种场景,包括系统管理、数据处理、持续集成/持续部署(CI/CD)、监控...

    FreeRTOS时间片调度(STM32F103C8T6)

    7. **延时与超时**:FreeRTOS提供了`vTaskDelay()`函数,任务可以调用此函数在指定的时钟滴答数后自动恢复执行,这对于实现周期性任务非常有用。 8. **调试工具**:FreeRTOS提供了一些内置的调试工具,如任务状态...

    多任务调度实验总结体会.docx

    在IT领域,任务调度是一项关键的操作,特别是在大数据处理、系统维护和自动化流程中。文档"多任务调度实验总结体会.docx"所提到的内容主要聚焦于多任务调度的问题、痛点以及可能的解决方案。以下是对这些要点的详细...

    分布式任务调度系统.zip

    分布式任务调度系统是一种在多台计算机之间协调工作负载的架构,它允许多个节点协同处理任务,以提高系统的可扩展性和容错性。在本文中,我们将深入探讨分布式任务调度的相关概念、技术以及如何利用Node.js进行毕业...

    轮转调度算法和优先调度算法的C++实现.rar

    通过理解这些调度算法的工作原理以及它们在C++中的实现方式,开发者可以更好地设计和优化多任务环境下的操作系统行为,提高系统效率。同时,学习这些基本概念也为深入研究更复杂的调度策略,如多级反馈队列调度,...

    实时系统调度算法论文

    常见的实时调度算法有以下几种: 1. **静态优先级调度**:任务在系统运行前就赋予固定优先级,高优先级的任务优先执行。例如,抢占式优先级调度允许高优先级任务中断低优先级任务的执行。 2. **动态优先级调度**:...

    云计算中任务调度算法的研究综述.pdf

    云计算任务调度算法的研究主要涉及到以下几个方面:云计算调度的特点和性能指标、云计算任务调度算法的分类、云计算任务调度算法研究的现状和进展、现有任务调度策略存在的问题。这些研究内容能够帮助我们更好地理解...

    进程调度算法模拟实现与性能分析

    例如,“基于Simgrid的网格任务调度模拟”、“Crossbar调度器的设计和实现”、“并行任务的分层调度算法”等,它们展示了在特定环境或系统中如何实现任务调度。这些内容在分布式处理系统和并行计算领域尤为关键,...

    Spring提供的三种定时任务机制及其比较

    通过在方法上添加此注解,Spring的定时任务执行器会自动处理任务调度。这种方法适用于简单任务,且不需Quartz的复杂特性。例如: ```java @Component public class ScheduledTasks { @Scheduled(fixedRate = ...

Global site tag (gtag.js) - Google Analytics