下面是暂时总结的四种自动任务执行方式
直接看代码了
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)
分享到:
相关推荐
本文由浅入深介绍四种任务调度的Java实现:ScheduledExecutor开源工具包Quartz开源工具包JCronTab此外,为结合实现复杂的任务调度,本文还将介绍Calendar的一些使用方法。Timer相信大家都已经非常熟悉java.util....
本文将探讨如何在后端框架中实现任务调度,包括任务调度的基本概念、常用技术、以及在几种流行后端框架中的具体实现方法。 任务调度是后端开发中一个关键的功能,它能够帮助自动化和优化许多常规和资源密集型任务。...
基于JDBC-Jobstore的方式实现集群(有数据库JobStoreTX或JobStoreCMT) 二.TerracottaJobStore的配置(无数据库的集群) 本文介绍的是JDBC-Jobstore基于数据库的集群: 1.目前,群集仅适用于JDBC-Jobstore...
在实现过程中,有几种常见的分布式任务调度框架可供选择: - **Quartz**: 一个流行的任务调度库,支持集群和分布式任务。但其不直接支持分布式协调,需要配合其他工具如Zookeeper。 - **ElasticJob**: 基于Apache ...
在Spring框架中,任务调度是实现应用程序自动化执行特定任务的关键特性。本实践主要涉及Spring集成两种常见的任务调度库:Spring的Timer和Quartz。这两者都允许开发者在预定义的时间间隔内执行任务,极大地提高了...
LTS由几个关键组件构成,包括任务提交客户端(TaskSubmitter)、任务调度器(TaskScheduler)、工作节点(WorkerNode)以及监控系统(Monitor)。 1. **任务提交客户端(TaskSubmitter)**:负责将用户定义的任务...
分布式定时任务调度系统是现代企业级应用中不可或缺的一部分,它能够有效地协调分布在不同节点上的任务,确保任务按预定的时间间隔准确、可靠地执行。在选择适合的分布式定时任务调度系统时,我们需要考虑多个因素,...
VIP的分布式任务调度平台具备以下几个关键特性: 1. **Java和Shell Jobs**:平台支持两种主要的任务类型——Java作业和Shell脚本作业。Java Jobs允许开发人员使用Java语言编写高度复杂的业务逻辑,而Shell Jobs则...
自动任务插件是一种软件工具,通常用于自动化执行一系列预先设定的操作,从而节省用户手动操作的时间和精力。在IT行业中,这种技术广泛应用于各种场景,包括系统管理、数据处理、持续集成/持续部署(CI/CD)、监控...
7. **延时与超时**:FreeRTOS提供了`vTaskDelay()`函数,任务可以调用此函数在指定的时钟滴答数后自动恢复执行,这对于实现周期性任务非常有用。 8. **调试工具**:FreeRTOS提供了一些内置的调试工具,如任务状态...
在IT领域,任务调度是一项关键的操作,特别是在大数据处理、系统维护和自动化流程中。文档"多任务调度实验总结体会.docx"所提到的内容主要聚焦于多任务调度的问题、痛点以及可能的解决方案。以下是对这些要点的详细...
分布式任务调度系统是一种在多台计算机之间协调工作负载的架构,它允许多个节点协同处理任务,以提高系统的可扩展性和容错性。在本文中,我们将深入探讨分布式任务调度的相关概念、技术以及如何利用Node.js进行毕业...
通过理解这些调度算法的工作原理以及它们在C++中的实现方式,开发者可以更好地设计和优化多任务环境下的操作系统行为,提高系统效率。同时,学习这些基本概念也为深入研究更复杂的调度策略,如多级反馈队列调度,...
常见的实时调度算法有以下几种: 1. **静态优先级调度**:任务在系统运行前就赋予固定优先级,高优先级的任务优先执行。例如,抢占式优先级调度允许高优先级任务中断低优先级任务的执行。 2. **动态优先级调度**:...
云计算任务调度算法的研究主要涉及到以下几个方面:云计算调度的特点和性能指标、云计算任务调度算法的分类、云计算任务调度算法研究的现状和进展、现有任务调度策略存在的问题。这些研究内容能够帮助我们更好地理解...
例如,“基于Simgrid的网格任务调度模拟”、“Crossbar调度器的设计和实现”、“并行任务的分层调度算法”等,它们展示了在特定环境或系统中如何实现任务调度。这些内容在分布式处理系统和并行计算领域尤为关键,...
通过在方法上添加此注解,Spring的定时任务执行器会自动处理任务调度。这种方法适用于简单任务,且不需Quartz的复杂特性。例如: ```java @Component public class ScheduledTasks { @Scheduled(fixedRate = ...