这里我们用JDK 5.0里的ScheduledExecutorService,它是一个接口,我们所利用的方法为
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。
initialDelay允许出现 0 和负数延迟(但不是周期),并将这些视为一种立即执行的请求.
下面我举例用来实现一个Task,在每天的上午8点运行.
代码如下:
public class SchedulerSample {
/**
* 定时执行调度类,来定时调度
*/
private ScheduledExecutorService schuledExecutor;
private final static String timer = "08:00:00";
//所有定时任务的Future
private Map<String,Future<?>> futureMap = new Hashtable<String,Future<?>>();
/**
* Construct for SchedulerSample.java.
*/
public SchedulerSample() {
}
//可以创建该schedule的方法,如init start stop reload etc.
void start() throws ParseException{
String result = "Admin's test ";
schuledExecutor = Executors.newScheduledThreadPool(3);
MockTask task = new MockTask(result);
long PERIOD = 24 * 60 * 60 * 1000L;
//TimeUnit.MILLISECONDS 指明时间单位.为毫秒
long delay = 0;
String key = "only a test ";
long curTime = System.currentTimeMillis();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String tmpstr = df.format(new Date(curTime));
String tmpstr2 = tmpstr.substring(0, 11) + timer;
long executeTime = df.parse(tmpstr2).getTime();
//这个值就是自程序运行时,多久以后运行MockTask.
delay = executeTime - curTime < 0 ? (executeTime - curTime + PERIOD) : (executeTime - curTime);
//here for test , assign delay = 0 or delay is negative and PERIOD = 10 * 1000;
delay = 0;
delay = -1;
PERIOD = 10 * 1000;
Future<?> future = schuledExecutor.scheduleAtFixedRate(task, delay , PERIOD, TimeUnit.MILLISECONDS);
futureMap.put(key, future);
}
void stop(){
schuledExecutor.shutdown();
for(Future<?> fu : futureMap.values()){
fu.cancel(true);
}
futureMap.clear();
}
void reload() throws ParseException{
stop();
start();
}
//etc methods,here dont care that
/**
* here is the test
* @throws ParseException
*/
public static void main(String[] args) throws ParseException{
SchedulerSample ss = new SchedulerSample();
ss.start();
}
}
/**
* .
* @author Admin Jul 21, 2008 3:23:38 PM
*
*/
class MockTask implements Runnable{
String print = "";
//here implemtion we only print a few word;
public MockTask(String print){
this.print = print;
}
private void Print(String str){
System.out.print(new Date(System.currentTimeMillis())+" | ");
System.out.println(str);
}
public void run() {
Print(this.print);
}
}
运行结果,Console出现如下
Mon Jul 21 15:36:03 CST 2008 | Admin's test
Mon Jul 21 15:36:13 CST 2008 | Admin's test
Mon Jul 21 15:36:23 CST 2008 | Admin's test
Mon Jul 21 15:36:33 CST 2008 | Admin's test
Mon Jul 21 15:36:43 CST 2008 | Admin's test
Mon Jul 21 15:36:53 CST 2008 | Admin's test
Mon Jul 21 15:37:03 CST 2008 | Admin's test
Mon Jul 21 15:37:13 CST 2008 | Admin's test
Mon Jul 21 15:37:23 CST 2008 | Admin's test
Mon Jul 21 15:37:33 CST 2008 | Admin's test
时间周期就是我们所测试设定的10*1000,其他的时间依次类推..定点执行,可以用delay来计算.具体请参照代码.请大家批评指正.
分享到:
相关推荐
在IT行业中,定时调度任务服务是不可或缺的一部分,它使得系统能够按预设的时间间隔自动执行某些任务,提高了工作效率并降低了人为操作的复杂性。本文将深入探讨如何利用C#语言,结合Quartz.NET任务调度库以及Log4...
了解以上知识点后,开发者可以根据项目需求选择合适的定时任务调度方式,确保任务的稳定、高效运行。在实际开发中,要充分考虑任务的可扩展性、容错性和易维护性,使定时任务成为提高系统效率的有效工具。
5、C#定时调度任务服务(Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务) 6、android 后台定时执行任务 示例源码 7、C# Quatrz定时任务job实现 8、Quartz.NET定时任务...
Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...
在"Quartz.net作业调度自定义定时执行任务多任务执行c#"这个主题中,我们将深入探讨如何使用Quartz.NET来实现自定义的定时任务,以及如何处理多任务执行。 首先,我们需要理解Quartz.NET的基本概念。在Quartz.NET中...
在Node.js环境中,定时调度任务是一项非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务,比如发送邮件、数据备份、统计分析等。在描述中提到的"nodejs定时调度任务",通常指的是利用Node.js的库或者内建...
在IT领域,尤其是在软件开发中,定时任务是一个非常常见的需求,它允许程序按照预定的时间间隔执行特定的操作。本文将深入探讨如何使用C#语言来实现一个自定义的定时任务系统,支持多任务运行,以便更好地满足开发中...
结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...
`ScheduleInfoAction`是我们的业务类,包含需要定时执行的方法,如`reSchdeuleJob()`。`MethodInvokingJobDetailFactoryBean`用来指定执行哪个对象的哪个方法,`SimpleTriggerBean`或`CronTriggerBean`作为触发器...
Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者定义定时任务,这些任务会在指定的时间点自动执行。Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架...
当我们需要实现定时执行任务时,ThinkPHP框架同样提供了便利的支持。下面我们将详细探讨在ThinkPHP中实现定时任务的两种主要方法。 ### 1. 基于Crontab的定时任务 Crontab是Linux系统中用于设置周期性被执行任务的...
3. **定义Job**:创建一个实现了`org.quartz.Job`接口的类,这个类代表了需要定时执行的任务。例如,我们可以创建一个名为`MyJob`的类: ```java public class MyJob implements Job { @Override public void ...
Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...
如果设置的同时运行 job 的数量为 0,则表示 Oracle 定时任务不能自动执行。这可能是由于某个版本的 BUG 导致的。 Step 4:修改设置的同时运行 job 的数量。 输入命令:SQL> ALTER SYSTEM SET JOB_QUEUE_...
在报表开发工具FineReport中,定时调度是一项重要的功能,它可以帮助用户按照预定的时间周期自动执行某些任务,例如生成报表、发送邮件等。在7.0.4版本中,为了更好地支持复杂的定时需求,FineReport引入了定时...
通过web端管理任务,操作自动传至任务中心自动执行(支持启动、停止、删除操作),任务支持立即执行,指定时间段执行,支持二次开发,也可对接外部webapi实现和已有系统无缝对接,系统内置Cron表达式生成器 ...
定义完任务后,我们需要使用`BackgroundJob.Enqueue`方法来调度任务。可以设置任务的执行周期,例如每天、每小时或者更具体的Cron表达式。例如: ```csharp BackgroundJob.Enqueue(() => MyJob.Execute()); ```...
在上述代码中,`MyTimerTask`是具体的任务类,实现了`run()`方法,`TimerManager`类负责创建`Timer`对象并调度任务。 ### 2. 指定每天特定时间执行任务 在描述中提到,任务是根据配置文件设置的每天特定时间执行。...