`
qingcyangg
  • 浏览: 14707 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

简单任务执行程序

阅读更多
package times;
import java.text.SimpleDateFormat;
import java.util.Date;

//main方法
public class AlarmClock {
   private final Scheduler scheduler = new Scheduler();
private final SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
private final int hourOfDay, minute, second;

public AlarmClock(int hourOfDay, int minute, int second)
{
this.hourOfDay=hourOfDay;
this.minute=minute;
this.second=second;
}

public void start()
{
scheduler.schedule(new SchedulerTask(){
   public void run()
   {
   soundAlarm();
   }
            private void soundAlarm() {
                System.out.println("Wake up! " +"It's " + simpleDateFormat.format(new Date()));
            }

}, new DailyIterator(hourOfDay, minute, second));
}

  public static void main(String [] args)
  {
  AlarmClock alarmClock =new AlarmClock(17,39,0);
  alarmClock.start();
  }
}

//时间迭代器
package times;

import java.util.Calendar;
import java.util.Date;

public class DailyIterator implements ScheduleIterator{

    @SuppressWarnings("unused")
private final int hourOfDay, minute, second;
    private final Calendar calendar = Calendar.getInstance();

    public DailyIterator(int hourOfDay, int minute, int second) {
        this(hourOfDay, minute, second, new Date());
    }

    public DailyIterator(int hourOfDay, int minute, int second, Date date) {
        this.hourOfDay = hourOfDay;
        this.minute = minute;
        this.second = second;
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        calendar.set(Calendar.MILLISECOND, 0);
        if (!calendar.getTime().before(date)) {
            calendar.add(Calendar.DATE, -1);
        }
    }

    public Date next() {
        calendar.add(Calendar.DATE, 1);
        return calendar.getTime();
    }


}
//接口
package times;

import java.util.Date;

public interface ScheduleIterator {
public Date next();
}
//
package times;

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

public class Scheduler {

    class SchedulerTimerTask extends TimerTask {
        private SchedulerTask schedulerTask;
        private ScheduleIterator iterator;
        public SchedulerTimerTask(SchedulerTask schedulerTask,
                ScheduleIterator iterator) {
            this.schedulerTask = schedulerTask;
            this.iterator = iterator;
        }
        public void run() {
            schedulerTask.run();
            reschedule(schedulerTask, iterator);
        }
    }

    private final Timer timer = new Timer();

    public Scheduler() {
    }

    public void cancel() {
        timer.cancel();
    }

    public void schedule(SchedulerTask schedulerTask,
            ScheduleIterator iterator) {

        Date time = iterator.next();
        if (time == null) {
            schedulerTask.cancel();
        } else {
            synchronized(schedulerTask.lock) {
                if (schedulerTask.state != SchedulerTask.VIRGIN) {
                  throw new IllegalStateException("Task already scheduled " + "or cancelled");
                }
                schedulerTask.state = SchedulerTask.SCHEDULED;
                schedulerTask.timerTask =
                    new SchedulerTimerTask(schedulerTask, iterator);
                timer.schedule(schedulerTask.timerTask, time);
            }
        }
    }

    private void reschedule(SchedulerTask schedulerTask,
            ScheduleIterator iterator) {

        Date time = iterator.next();
        if (time == null) {
            schedulerTask.cancel();
        } else {
            synchronized(schedulerTask.lock) {
                if (schedulerTask.state != SchedulerTask.CANCELLED) {
                    schedulerTask.timerTask =
                        new SchedulerTimerTask(schedulerTask, iterator);
                    timer.schedule(schedulerTask.timerTask, time);
                }
            }
        }
    }

}
//
package times;

import java.util.TimerTask;

public abstract class SchedulerTask implements Runnable {

    final Object lock = new Object();

    int state = VIRGIN;
    static final int VIRGIN = 0;
    static final int SCHEDULED = 1;
    static final int CANCELLED = 2;

    TimerTask timerTask;

    protected SchedulerTask() {
    }

    public abstract void run();

    public boolean cancel() {
        synchronized(lock) {
            if (timerTask != null) {
                timerTask.cancel();
            }
            boolean result = (state == SCHEDULED);
            state = CANCELLED;
            return result;
        }
    }

    public long scheduledExecutionTime() {
        synchronized(lock) {
         return timerTask == null ? 0 : timerTask.scheduledExecutionTime();
        }
    }

}
该程序可以实现简单的自动跑任务程序,其实我们可以使用java中util类中的Timer和TimerTask实现定时任务,但是这个不够灵活,在使用夏令时就会出现任务执行时间上的偏差,在这里我们使用日历算法实现。虽然说执行任务的底层是JAVA虚拟机,会出现时间的差异,使用该算法至少可以避免一些问题,具体的自己也不是很清楚。在使用任务执行程序的时候,其实我们很难保证该任务是百分之一百的执行成功了,因此在做任务的时候还要做一些其他的策略,来捕捉没有成功执行的任务,根据具体的是业务需求来考虑是否再重复执行
分享到:
评论

相关推荐

    可以动态执行程序代码的程序

    标题中的“可以动态执行程序代码的程序”是指一种软件或框架,它允许用户在运行时输入或提供代码,然后即时编译和执行这段代码。这种功能通常被用于教学环境、脚本编写、自动化任务或者在应用程序中提供自定义扩展的...

    简单任务管理器 进程查看

    在本例中,我们讨论的是一个简单的任务管理器,它的主要功能包括查看当前系统中的进程以及根据需要终止特定的进程。 首先,让我们深入了解“进程”。在计算机科学中,进程是程序在内存中的执行实例。每个进程都有...

    windows下的简单任务管理器

    4. **运行新进程**:用户可以直接通过任务管理器启动新的应用程序或命令,类似于在命令行中执行程序。这通常需要调用CreateProcess或ShellExecute等Windows API函数。 5. **关机重启功能**:应用程序能够提供系统...

    WTL简单计划任务程序

    4. **任务执行逻辑**:一旦达到设定的触发条件,程序会启动指定的可执行文件,并可能监控其运行状态。这可能涉及到进程管理和文件操作的知识。 5. **任务管理**:用户还可以查看、编辑和删除已创建的任务。这需要...

    LPC2148 UCOS移植使用-6个简单任务

    六个简单任务的设计可能如下: 1. LED闪烁:创建一个周期性任务,控制LPC2148的GPIO引脚,使LED灯按照预设频率闪烁。 2. 串口通信:实现一个接收和发送数据的任务,通过UART接口与主机或其他设备进行数据交换。 3...

    根据系统进行自动执行程序

    在本例中,通过结合获取当前时间、条件判断和执行VBS脚本的技术,我们实现了基于系统时间自动执行程序的目标。这种技术在日常IT运维、系统管理和个人自动化项目中都有广泛的应用价值。 总之,掌握批处理脚本的编写...

    每天定时执行 指定时间执行程序

    标题"每天定时执行 指定时间执行程序"表明我们要配置一个每天在特定时间执行的任务。在Quartz中,可以使用CronTrigger实现这一功能,Cron表达式是一种字符串,用于定义任务的执行时间。例如,如果要每天早上8点执行...

    gtui:具有文本用户界面的简单任务计划程序和执行程序

    ui具有基于文本的用户界面的任务计划程序和执行程序,能够: 将任务和依赖性声明为图形执行任务图显示任务状态,标准输出和日志提供一个不错的用户界面为什么这个我总是有很多脚本要运行。 我想以一定顺序并行执行...

    一文看懂计算机执行程序的过程

    计算机执行程序的过程,实质上是计算机通过其内部的控制器,按照特定的指令序列来完成各种任务的过程。这个过程涉及多个关键环节和知识点,包括程序、指令、指令格式、控制器、指令周期以及指令的执行过程等。 程序...

    易语言任务栏程序图标的简单隐藏和显示

    本篇文章将详细讲解如何使用易语言来实现任务栏程序图标的简单隐藏和显示。 易语言是一款面向中文用户的编程语言,它的语法简洁明了,适合初学者学习。在易语言中,我们可以利用系统提供的API函数来操作任务栏图标...

    myAlexa:这个项目就像alexa或siri一样,可以执行简单的任务

    【标题】"myAlexa:实现类似Alexa或Siri的简单任务执行程序" 在这个项目中,"myAlexa"是一个旨在模拟Amazon的Alexa和Apple的Siri功能的程序,让用户能够通过自然语言交互来执行一系列简单的任务。这个程序是用Python...

    51简单任务切换器

    中断发生时,任务切换器会保存当前任务的上下文,处理中断,然后恢复中断前的任务或选择新的任务执行。 5. **c_timer_51**:从文件名推测,这可能是用于定时任务切换的计时器模块。它负责定期触发任务切换,可能是...

    STM32 UCOS简单任务调度

    此外,充分利用STM32的中断机制,可以优化实时性能,例如设置定时器中断来触发周期性的任务执行。 总结来说,STM32 UCOS简单任务调度涉及到STM32微控制器、uC/OS实时操作系统以及Cortex-M3处理器的集成和应用。通过...

    简单任务管理器C#源码

    【标题】"简单任务管理器C#源码"所涉及的知识点主要集中在C#编程语言以及Windows应用程序开发领域。C#是一种面向对象的编程语言,由微软公司开发,广泛应用于.NET框架下的各种应用开发,包括桌面应用、Web应用以及...

    分布式任务执行系统cobweb.zip

    Client程序部署简单,只需要复制几个文件后执行即可。 不同的任务有单独的线程并发运行,支持多CPU。 任务代码分发、重载自动化,只需要维护Server服务器上的代码。 Server和Client之间的通信进行文本加密。 ...

    C#创建计划任务,定时服务,完美执行已测

    以下是一个简单的C#代码示例,创建一个开机启动的任务,执行名为"MyApp.exe"的程序: ```csharp using System.Management.Automation; using System.Management.Automation.Runspaces; public void ...

    C# 简单任务管理器

    3. **Button**:执行特定操作,如添加、删除或更新任务。 4. **ListView**:展示任务列表,可以自定义列来显示任务信息,如任务名称、状态和截止日期。 5. **DataGridView**:另一种可能的选择,如果希望展示更复杂...

    java定时任务,每天定时执行任务demo

    例如,我们可以创建一个监听应用启动和关闭的监听器,确保定时任务在应用程序启动时开始,在应用程序关闭时停止: ```java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public ...

    单片机设计复杂多任务程序

    此外,这种方式还存在资源浪费的问题——CPU在执行简单任务时往往处于低效状态。 #### 三、多任务程序设计的核心思想 为了克服上述局限性,我们需要转变思维模式,引入更为高级的多任务程序设计方法。具体来说,...

Global site tag (gtag.js) - Google Analytics