`
saybody
  • 浏览: 903189 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

timer demo 之二

阅读更多

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();
}
}

分享到:
评论

相关推荐

    Android Timer Task Demo

    这时,`TimerTask` 和 `Timer` 类就派上了用场。本篇将详细介绍如何在Android中使用`TimerTask`来实现定时任务,并通过一个简单的Demo进行示例说明。 `TimerTask`是Java提供的一个定时执行任务的类,它继承自`...

    C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-22

    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

    本篇将深入探讨"MicroBlaze AXI-TIMER Demo",这是一个关于如何在Xilinx ISE环境中使用AXI TIMER的实例教程。AXI TIMER是Xilinx MicroBlaze处理器系统中的一个关键组件,它提供了定时和计数功能,对于实时系统、中断...

    Timer控件定时更新UpdatePanel - Demo

    2. 添加`Timer`控件,并设置其`Interval`属性和`OnTick`事件: ```html <asp:Timer ID="Timer1" runat="server" Interval="5000" OnTick="Timer1_Tick"> </asp:Timer> ``` 这里的`Interval="5000"`表示每隔5秒钟触发...

    timer倒计时demo

    本示例“timer倒计时demo”关注的是使用编程技术实现一个倒计时定时器。这个压缩包可能包含了一个名为“downTimer”的文件,这可能是源代码、示例应用程序或者相关资源,用于演示如何创建一个简单的倒计时功能。 ...

    timer_demo.rar

    【标题】:“timer_demo.rar”是一个与Zynq FPGA平台相关的示例程序,主要涉及到定时器的使用。在Zynq系统中,定时器是关键的硬件组件,用于执行各种时间控制任务,如中断触发、任务调度等。这个示例可能提供了一个...

    29-DEMO-使用Timer0做16路软件PWM

    本DEMO“29-DEMO-使用Timer0做16路软件PWM”主要展示了如何利用Timer0来实现多通道的脉宽调制(PWM),这是一种常用于模拟信号输出、电机控制以及亮度调节等应用的技术。下面我们将详细讨论Timer0和软件PWM的相关...

    Demo_2使用Timer组件实现冬奥会计时

    这个Demo_2项目就是一个很好的实例,展示了如何利用Timer类来创建一个能够实时更新并显示计时的简单应用程序。 首先,我们需要了解`System.Timers.Timer`组件的基本概念。它是.NET框架提供的一种异步计时器,可以...

    JSSIP实现webrtc demo

    jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo jspsip实现webrtc进行音视频通信demo

    TimerDemo - 定时器

    2. **选择器**:选择器是定时器触发时调用的方法。在上面的例子中,`updateProgress`是我们在目标对象(通常是当前控制器)中定义的方法,用于处理进度更新。 3. **启动定时器**:创建了定时器之后,需要将其添加到...

    Java定时器Timer简述.pdf

    在Timer类中,schedule方法是用于安排一次性任务的主要方法之一。它有几个不同的重载形式: 1. schedule(TimerTask task, long delay):安排任务task在延迟delay后执行。这里“延迟”是指从当前时间开始计算的时间...

    Thread和Timer实现延时用法(自动切换窗体demo)

    Thread和Timer实现延时用法

    Timer与TimerTask(计时器)

    TimerTaskDemo myTask2 = new TimerTaskDemo("Second task"); myTask2.start(0, 1); // 每隔1秒执行一次 try { Thread.sleep(6000); // 主线程暂停6秒 } catch (InterruptedException e) { e.printStackTrace...

    数字时钟 Clock Demo Clock Demo

    `scheduleAtFixedRate`方法用于设置定时任务,第一个参数是任务,第二个参数是首次执行的延迟(这里是0,意味着立即执行),第三个参数是周期(这里是1000毫秒,即1秒)。 在实际应用中,`ClockDemo`可能会包含更多...

    WCF 双工 和 和 System.Threading.Timer 时间 的 demo

    标题中的“WCF 双工 和 System.Threading.Timer”的示例主要涵盖了两个重要的IT知识点:Windows Communication Foundation(WCF)的双工通信模式以及System.Threading.Timer类的使用。 首先,让我们详细了解一下WCF...

    DSP28335 测试Demo

    这款Demo旨在帮助开发者快速理解和上手DSP28335的各个功能模块,包括模数转换器(ADC)、通用输入输出(GPIO)、闪存(FLASH)、集成电路间通信(I2C)以及定时器(TIMER)等。通过这些基本功能的演示,开发者可以...

    pic24f_demo

    "pic24f_demo"是一个专为初学者设计的实践项目,它涵盖了pic24f单片机的基础功能模块,如USART(通用同步异步收发传输器)、TIMER(定时器)、GPIO(通用输入/输出)、WDT(看门狗定时器)和PWM(脉宽调制)。...

    stc8_demo程序.rar_DEMO_STC8 PCA_stc8_stc8 pwm_stc8a8

    stc8,DEMO程序: uart stc8aid delay IO timer adc pwm pca

    C#进度条demo.rar

    2. **Timer定时器组件**: Timer组件在C#中用于在特定间隔触发事件。在这个示例中,Timer可能被用来模拟一个耗时的操作,并周期性地更新进度条。Timer的`Interval`属性决定了它每隔多少毫秒触发一次`Tick`事件,`...

    1_SC8P115xA Demo Code 20190707(1)_sc8p115_DEMO_sc8p115sdk_

    该Demo代码集合提供了针对SC8P115型号芯片的示例程序,帮助开发者快速理解和掌握其功能特性。20190707版本的代码可能包含了该日期前的最新更新和优化。 SC8P115是一款高性能、低功耗的8位微控制器,具备丰富的外设...

Global site tag (gtag.js) - Google Analytics