`
javaeyetodj
  • 浏览: 430745 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

定时执行案例二

阅读更多

 

http://blog.sina.com.cn/s/blog_401a71d1010005cc.html

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

public class ScheduleIterator {
private final int hourOfDay, minute, second;
private final Calendar calendar = Calendar.getInstance();

public ScheduleIterator(int month, int day, int hourOfDay, int minute,
int second) {
this(month, day, hourOfDay, minute, second, new Date());
}

public ScheduleIterator(int month, int day, int hourOfDay, int minute,
int second, Date date) {
this.hourOfDay = hourOfDay;
this.minute = minute;
this.second = second;
calendar.setTime(date);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
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.MINUTE, 1);
return calendar.getTime();
}

}

Scheduler.java
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() {
}

/**
* Terminates this <code>Scheduler</code>, discarding any currently scheduled tasks. Does not interfere with a currently executing task (if it exists). Once a scheduler has been terminated, its execution thread terminates gracefully, and no more tasks may be scheduled on it.
* <p>
* Note that calling this method from within the run method of a scheduler task that was invoked by this scheduler absolutely guarantees that the ongoing task execution is the last task execution that will ever be performed by this scheduler.
* <p>
* This method may be called repeatedly; the second and subsequent calls have no effect.
*/

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

/**
* Schedules the specified task for execution according to the specified schedule. If times specified by the <code>ScheduleIterator</code> are in the past they are scheduled for immediate execution.
* <p>
* @param schedulerTask task to be scheduled
* @param iterator iterator that describes the schedule
* @throws IllegalStateException if task was already scheduled or cancelled, scheduler was cancelled, or scheduler thread terminated.
*/

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);
System.out.println("time:s=" + schedulerTask.timerTask + "time:t=" +
time.toLocaleString());
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);
System.out.println("time1:s=" + schedulerTask.timerTask + "time1:t=" +
time.toLocaleString());
timer.schedule(schedulerTask.timerTask, time);
}
}
}
}

}

SchedulerTask.java
import java.util.TimerTask;

/**
* A task that can be scheduled for recurring execution by a {@link Scheduler}.
*/
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();
}
}

}

AlarmClock.java
import java.text.SimpleDateFormat;
import java.util.Date;
import java.sql.*;

public class AlarmClock {
private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;
private final Scheduler scheduler = new Scheduler();
private final SimpleDateFormat dateFormat =
new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
private final int month, day, hourOfDay, minute, second;
private final String content;

public AlarmClock(int month, int day, int hourOfDay, int minute, int second,
String content) {
this.month = month;
this.day = day;
this.hourOfDay = hourOfDay;
this.minute = minute;
this.second = second;
this.content = content;
}

public void start() {
scheduler.schedule(new SchedulerTask() {
public void run() {
soundAlarm();
}

private void soundAlarm() {
// 在这里放要执行的东西
System.out.println( "我* . 执行到这儿了. "+content);
}
}

, new ScheduleIterator(month, day, hourOfDay, minute, second));
}

public static void main(String[] args) {
AlarmClock alarmClock = new AlarmClock(3, 14, 16, 31, 40,
"hello world !!!");
alarmClock.start();
}

}

分享到:
评论

相关推荐

    定时任务+案例

    2. **线程与任务调度**:在多线程环境中,定时任务通常会创建一个单独的线程,以便在主程序运行的同时独立执行任务。这样不会阻塞主线程,提高系统效率。 3. **Java的定时任务工具**:Java提供了多种实现定时任务的...

    linux下定时执行php脚本

    - **应用场景**:在 Linux 下,如果需要定时执行某些程序,例如备份数据、发送邮件等,可以利用 Cron 来实现自动化处理。 #### 二、Cron 配置文件介绍 - **crontab**: 用户级别的 Cron 配置文件,用于设置个人用户...

    定时任务完整案例 Java quartz

    【标题】"定时任务完整案例 Java quartz" 涉及的核心技术是Java的调度库Quartz,它是一个开源的工作调度框架,广泛应用于企业级应用中,用于执行定时任务。Quartz能够帮助开发者创建、调度和执行任务,实现高度灵活...

    shell定时执行

    `Shell定时执行`指的是通过设置定时任务,让特定的Shell脚本在预设的时间自动运行,这对于系统维护、数据备份、日志清理等周期性任务非常实用。本文将详细讲解如何使用Shell进行定时执行。 首先,我们需要了解Linux...

    【Java源码】基于Quartz定时调度jar包的执行案例.zip

    【Java源码】基于Quartz定时调度jar包的执行案例.zip 该定时器Demo用于定时执行制定路径下的jar包的编译,也可以用于普通的任务调度.通过对任务的查询修改删除来管理整个列表文件.可以通关开启和关闭来更改jar的开始...

    Windows服务定时执行sql

    【Windows服务定时执行SQL】是一种常见的任务自动化场景,主要用于定期执行数据库备份、数据同步或运行维护脚本等操作。在Windows操作系统中,通过创建服务应用程序并结合编程语言(如C#)可以实现这一功能。本项目...

    RW 微内核系统,创建一个定时任务案例

    2. **创建定时任务**: 创建一个名为`Task_LED`的任务,该任务负责控制LED的闪烁。任务应该包含一个循环,其中包含点亮LED、延迟一段时间然后熄灭LED的步骤。为了实现定时,我们可以使用微内核提供的延时函数,如`...

    易语言 Crontab 定时任务执行模块 v1.2 支持单位秒 也可做计时器源码

    这个易语言 Crontab 定时任务执行模块 v1.2 则是将这种功能移植到了易语言环境中,让开发者能够方便地在易语言程序中实现定时任务的功能。 该模块特别之处在于支持秒级别的精度,这意味着你可以设置更为精确的定时...

    java定时任务开源案例

    Java定时任务是软件开发中一个不可或缺的特性,它允许程序在特定时间执行预定的任务,而无需用户干预。在Java世界里,实现定时任务的方式多种多样,包括但不限于使用Java内置的`java.util.Timer`和`java.util....

    Spring的定时容器案例

    在Spring框架中,定时任务是通过Spring的定时容器(Spring Task)实现的,它提供了一种灵活、可扩展的方式来执行周期性的任务。Spring Task也被称为Spring的调度器,它可以让我们在应用程序中添加定时任务,无需依赖...

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

    2. **任务执行**:根据任务的执行间隔,调度器应在适当的时间调用任务函数。 3. **多任务管理**:确保同时可以处理多个任务,避免冲突和资源争用。 4. **任务取消**:提供方法取消不再需要的任务。 5. **任务状态...

    Python代码源码-实操案例-框架案例-如何在Windows系统下定时执行Python程序.zip

    本压缩包文件包含的就是一系列关于如何在Windows环境下定时执行Python程序的实例代码和指导。 在Windows系统下,我们可以借助几种不同的方法来实现Python程序的定时执行: 1. **Windows计划任务 (Task Scheduler)*...

    linux 里定时执行删除日志

    在Linux系统中,定时执行任务是一项非常实用的功能,尤其对于自动化运维、系统监控以及资源管理等方面至关重要。本文将深入解析如何在Linux环境下设置定时任务来定期执行特定操作,特别是删除日志或无用文件,以释放...

    Java定时Quartz测试案例

    本测试案例旨在展示如何使用Quartz来创建、管理和执行定时任务。 首先,我们需要在项目中引入Quartz的依赖库。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler ...

    易语言源码易语言定时启动程序源码.rar

    在这个案例中,我们关注的是一个定时启动程序的源代码。 定时启动程序是计算机程序的一种,它的主要功能是在预设的时间点自动启动另一程序或执行特定任务。这类程序在日常应用中非常广泛,比如系统维护、自动备份、...

    shell脚本定时执行logstash任务异常mail465发邮件.rar

    这个压缩包文件"shell脚本定时执行logstash任务异常mail465发邮件.rar"可能包含了一个用于监控Logstash任务的shell脚本,当Logstash工作出现异常时,脚本会自动通过SMTP服务器发送邮件通知。 1. **shell脚本**:...

    定时执行(定时器)demo

    2. **创建Job类**:编写实现`Job`接口的类,定义需要定时执行的任务逻辑。 3. **创建Trigger**:根据需求创建触发器,设定执行频率和时间。 4. **注册Job和Trigger**:将Job和Trigger添加到Scheduler实例中,告诉...

    Talend Job - Windows 版本定时任务 简单操作 希望能帮助各位同是初学者的人们

    2. **使用Windows任务计划程序**:利用Windows内置的任务计划程序来安排定时任务的执行。 3. **测试**:在正式部署之前,务必对定时任务进行充分的测试,确保其能够按照预期正常运行。 #### 五、案例分析 假设我们...

    简洁的定时任务实例

    一般定时任务配置都需要相互的依赖,代码量多也不简洁,也得有任务管理器管理,此版本的定时任务本着简洁而去配置只需两步 ...二,相对的类和方法 &lt;bean id="myTaskXml" class="test.task"&gt;&lt;/bean&gt;

    定时任务测试样例

    【定时任务测试样例】是基于SpringBoot框架和Quartz库设计的一个...通过这个案例,开发者可以了解到如何在微服务架构中实现灵活的定时任务管理和控制,这对于构建自动化运维系统或大数据处理平台具有重要的实践价值。

Global site tag (gtag.js) - Google Analytics