1.先写一个接口
interface ScheduleIterator.java
import java.util.Date;
public interface ScheduleIterator {
public Date next();
public Date next_time();
}
2.实现 class
DailyIterator.java
import java.util.Calendar;
import java.util.Date;
public class DailyIterator implements ScheduleIterator {
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();
}
//下一个分钟
public Date next_time() {
calendar.add(Calendar.MINUTE, 1);
System.out.println("===="+calendar.getTime());
return calendar.getTime();
}
//内部测试
public static void main(String[] args)
{
DailyIterator d= new DailyIterator(11,45,0);
System.out.println(d.next_time());
}
}
3.Scheduler.java 具体实现的定时任务的class
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_time();
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_time();
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);
}
}
}
}
}
4.AlarmClock.java
import java.text.SimpleDateFormat;
import java.util.Date;
public class AlarmClock {
private final Scheduler scheduler = new Scheduler();
private final SimpleDateFormat dateFormat = 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 "
+ dateFormat.format(new Date()));
// Start a new thread to sound an alarm...
}
}, new DailyIterator(hourOfDay, minute, second));
}
public static void main(String[] args) {
//13 28 0 从某一个小时分钟秒从始,
AlarmClock alarmClock = new AlarmClock(13, 28, 0);
alarmClock.start();
}
}
分享到:
相关推荐
这时,`TimerTask` 和 `Timer` 类就派上了用场。本篇将详细介绍如何在Android中使用`TimerTask`来实现定时任务,并通过一个简单的Demo进行示例说明。 `TimerTask`是Java提供的一个定时执行任务的类,它继承自`...
C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4...
本篇将深入探讨"MicroBlaze AXI-TIMER Demo",这是一个关于如何在Xilinx ISE环境中使用AXI TIMER的实例教程。AXI TIMER是Xilinx MicroBlaze处理器系统中的一个关键组件,它提供了定时和计数功能,对于实时系统、中断...
2. 添加`Timer`控件,并设置其`Interval`属性和`OnTick`事件: ```html <asp:Timer ID="Timer1" runat="server" Interval="5000" OnTick="Timer1_Tick"> </asp:Timer> ``` 这里的`Interval="5000"`表示每隔5秒钟触发...
本示例“timer倒计时demo”关注的是使用编程技术实现一个倒计时定时器。这个压缩包可能包含了一个名为“downTimer”的文件,这可能是源代码、示例应用程序或者相关资源,用于演示如何创建一个简单的倒计时功能。 ...
【标题】:“timer_demo.rar”是一个与Zynq FPGA平台相关的示例程序,主要涉及到定时器的使用。在Zynq系统中,定时器是关键的硬件组件,用于执行各种时间控制任务,如中断触发、任务调度等。这个示例可能提供了一个...
本DEMO“29-DEMO-使用Timer0做16路软件PWM”主要展示了如何利用Timer0来实现多通道的脉宽调制(PWM),这是一种常用于模拟信号输出、电机控制以及亮度调节等应用的技术。下面我们将详细讨论Timer0和软件PWM的相关...
这个Demo_2项目就是一个很好的实例,展示了如何利用Timer类来创建一个能够实时更新并显示计时的简单应用程序。 首先,我们需要了解`System.Timers.Timer`组件的基本概念。它是.NET框架提供的一种异步计时器,可以...
jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo
2. **选择器**:选择器是定时器触发时调用的方法。在上面的例子中,`updateProgress`是我们在目标对象(通常是当前控制器)中定义的方法,用于处理进度更新。 3. **启动定时器**:创建了定时器之后,需要将其添加到...
在Timer类中,schedule方法是用于安排一次性任务的主要方法之一。它有几个不同的重载形式: 1. schedule(TimerTask task, long delay):安排任务task在延迟delay后执行。这里“延迟”是指从当前时间开始计算的时间...
Thread和Timer实现延时用法
TimerTaskDemo myTask2 = new TimerTaskDemo("Second task"); myTask2.start(0, 1); // 每隔1秒执行一次 try { Thread.sleep(6000); // 主线程暂停6秒 } catch (InterruptedException e) { e.printStackTrace...
`scheduleAtFixedRate`方法用于设置定时任务,第一个参数是任务,第二个参数是首次执行的延迟(这里是0,意味着立即执行),第三个参数是周期(这里是1000毫秒,即1秒)。 在实际应用中,`ClockDemo`可能会包含更多...
标题中的“WCF 双工 和 System.Threading.Timer”的示例主要涵盖了两个重要的IT知识点:Windows Communication Foundation(WCF)的双工通信模式以及System.Threading.Timer类的使用。 首先,让我们详细了解一下WCF...
这款Demo旨在帮助开发者快速理解和上手DSP28335的各个功能模块,包括模数转换器(ADC)、通用输入输出(GPIO)、闪存(FLASH)、集成电路间通信(I2C)以及定时器(TIMER)等。通过这些基本功能的演示,开发者可以...
"pic24f_demo"是一个专为初学者设计的实践项目,它涵盖了pic24f单片机的基础功能模块,如USART(通用同步异步收发传输器)、TIMER(定时器)、GPIO(通用输入/输出)、WDT(看门狗定时器)和PWM(脉宽调制)。...
stc8,DEMO程序: uart stc8aid delay IO timer adc pwm pca
2. **Timer定时器组件**: Timer组件在C#中用于在特定间隔触发事件。在这个示例中,Timer可能被用来模拟一个耗时的操作,并周期性地更新进度条。Timer的`Interval`属性决定了它每隔多少毫秒触发一次`Tick`事件,`...
该Demo代码集合提供了针对SC8P115型号芯片的示例程序,帮助开发者快速理解和掌握其功能特性。20190707版本的代码可能包含了该日期前的最新更新和优化。 SC8P115是一款高性能、低功耗的8位微控制器,具备丰富的外设...