`
laserdance
  • 浏览: 92540 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

定时执行调度任务

阅读更多
这里我们用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来计算.具体请参照代码.请大家批评指正.
2
0
分享到:
评论
2 楼 laserdance 2008-07-23  
不好意思啊,我是直接jdk 1.4 -->jdk 6, 有时间一定看jdk 5.0 ,据说很经典,谢谢楼上指正... 

相关推荐

    C#定时调度任务服务

    在IT行业中,定时调度任务服务是不可或缺的一部分,它使得系统能够按预设的时间间隔自动执行某些任务,提高了工作效率并降低了人为操作的复杂性。本文将深入探讨如何利用C#语言,结合Quartz.NET任务调度库以及Log4...

    java定时任务调度

    了解以上知识点后,开发者可以根据项目需求选择合适的定时任务调度方式,确保任务的稳定、高效运行。在实际开发中,要充分考虑任务的可扩展性、容错性和易维护性,使定时任务成为提高系统效率的有效工具。

    (动态多)定时任务源码自动运行调度后台执行

    5、C#定时调度任务服务(Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务) 6、android 后台定时执行任务 示例源码 7、C# Quatrz定时任务job实现 8、Quartz.NET定时任务...

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    在"Quartz.net作业调度自定义定时执行任务多任务执行c#"这个主题中,我们将深入探讨如何使用Quartz.NET来实现自定义的定时任务,以及如何处理多任务执行。 首先,我们需要理解Quartz.NET的基本概念。在Quartz.NET中...

    Node.js-nodejs定时调度任务

    在Node.js环境中,定时调度任务是一项非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务,比如发送邮件、数据备份、统计分析等。在描述中提到的"nodejs定时调度任务",通常指的是利用Node.js的库或者内建...

    C#实现的自定义定时任务 可定时运行 多任务运行

    在IT领域,尤其是在软件开发中,定时任务是一个非常常见的需求,它允许程序按照预定的时间间隔执行特定的操作。本文将深入探讨如何使用C#语言来实现一个自定义的定时任务系统,支持多任务运行,以便更好地满足开发中...

    ASP.NET使用Quartz.NET实现定时任务调度

    结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...

    spring动态定时调度任务

    `ScheduleInfoAction`是我们的业务类,包含需要定时执行的方法,如`reSchdeuleJob()`。`MethodInvokingJobDetailFactoryBean`用来指定执行哪个对象的哪个方法,`SimpleTriggerBean`或`CronTriggerBean`作为触发器...

    quartz 定时任务调度

    Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的时间调度任务。它允许开发者定义定时任务,这些任务会在指定的时间点自动执行。Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架...

    ThinkPHP实现定时执行任务DEMO

    当我们需要实现定时执行任务时,ThinkPHP框架同样提供了便利的支持。下面我们将详细探讨在ThinkPHP中实现定时任务的两种主要方法。 ### 1. 基于Crontab的定时任务 Crontab是Linux系统中用于设置周期性被执行任务的...

    spring整合quartz定时任务调度

    3. **定义Job**:创建一个实现了`org.quartz.Job`接口的类,这个类代表了需要定时执行的任务。例如,我们可以创建一个名为`MyJob`的类: ```java public class MyJob implements Job { @Override public void ...

    Spring quartz 定时任务调度

    Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...

    ORACLE定时任务不能自动执行的检查修复步聚

    如果设置的同时运行 job 的数量为 0,则表示 Oracle 定时任务不能自动执行。这可能是由于某个版本的 BUG 导致的。 Step 4:修改设置的同时运行 job 的数量。 输入命令:SQL&gt; ALTER SYSTEM SET JOB_QUEUE_...

    报表开发工具FineReport决策系统教程之【3】定时调度

    在报表开发工具FineReport中,定时调度是一项重要的功能,它可以帮助用户按照预定的时间周期自动执行某些任务,例如生成报表、发送邮件等。在7.0.4版本中,为了更好地支持复杂的定时需求,FineReport引入了定时...

    c#任务定时调度系统,无缝对接已有系统

    通过web端管理任务,操作自动传至任务中心自动执行(支持启动、停止、删除操作),任务支持立即执行,指定时间段执行,支持二次开发,也可对接外部webapi实现和已有系统无缝对接,系统内置Cron表达式生成器 ...

    furion内置的定时任务使用学习

    定义完任务后,我们需要使用`BackgroundJob.Enqueue`方法来调度任务。可以设置任务的执行周期,例如每天、每小时或者更具体的Cron表达式。例如: ```csharp BackgroundJob.Enqueue(() =&gt; MyJob.Execute()); ```...

    定时执行任务例子 绝对好用

    在上述代码中,`MyTimerTask`是具体的任务类,实现了`run()`方法,`TimerManager`类负责创建`Timer`对象并调度任务。 ### 2. 指定每天特定时间执行任务 在描述中提到,任务是根据配置文件设置的每天特定时间执行。...

Global site tag (gtag.js) - Google Analytics