java刷卡计时计次源码美萍_Java 定时调配 Timer 类和定任务 TimerTask 类(一篇详细且完整的源码分析以及四种简单的使用方法)...

前言

在我们日常生活中,我们常常会遇到有关计时器的事情。如商城类项目会在某年某月某日某时某分某秒进行特价活动,那么当时间到达这个时间点上的时候该事件就会触发。

1、Timer 类构造函数摘要

1 Timer()2 创建一个新计时器。3 Timer(booleanisDaemon)4 创建一个新计时器,可以指定其相关的线程作为守护线程运行。5 Timer(String name)6 创建一个新计时器,其相关的线程具有指定的名称7 Timer(String name, booleanisDaemon)8 创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护线程运行

2、Timer 类方法摘要

1 voidcancel()2 终止此计时器,丢弃所有当前已安排的任务。3 intpurge()4 从此计时器的任务队列中移除所有已取消的任务。5 voidschedule(TimerTask task, Date time)6 安排在指定的时间执行指定的任务。7 void schedule(TimerTask task, Date firstTime, longperiod)8 安排指定的任务在指定的时间开始进行重复的固定延迟执行。9 void schedule(TimerTask task, longdelay)10 安排在指定延迟后执行指定的任务。11 void schedule(TimerTask task, long delay, longperiod)12 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。13 void scheduleAtFixedRate(TimerTask task, Date firstTime, longperiod)14 安排指定的任务在指定的时间开始进行重复的固定速率执行。15 void scheduleAtFixedRate(TimerTask task, long delay, longperiod)16 安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

3、TimerTask 类方法摘要

1 booleancancel()2 取消此计时器任务。3 voidrun()4 此计时器任务要执行的操作。5 longscheduledExecutionTime()6 返回此任务最近实际 执行的已安排 执行时间。

4、Timer 源码分析

1 packagejava.util;2 importdalvik.annotation.optimization.ReachabilitySensitive;3 importjava.util.Date;4 importjava.util.concurrent.atomic.AtomicInteger;5

6

7 //定时器类

8 public classTimer {9

10 //任务队列

11 @ReachabilitySensitive12 private final TaskQueue queue = newTaskQueue();13

14 //内置线程

15 @ReachabilitySensitive16 private final TimerThread thread = newTimerThread(queue);17

18 /*

19 只是重写了 finalize 方法而已,是为了垃圾回收的时候,将相应的信息回收掉,做 GC 的回补,20 也就是当 timer 线程由于某种原因死掉了,而未被 cancel,里面的队列中的信息需要清空掉,21 不过我们通常是不会考虑这个方法的,所以知道 java 写这个方法是干什么的就行了。22 */

23 private final Object threadReaper = newObject() {24 protected void finalize() throwsThrowable {25 synchronized(queue) {26 thread.newTasksMayBeScheduled = false;27 queue.notify();28 }29 }30 };31

32 private final static AtomicInteger nextSerialNumber = new AtomicInteger(0);33 private static intserialNumber() {34 returnnextSerialNumber.getAndIncrement();35 }36

37 //空的构造函数,这里会调用 Timer(String name) 给相应线程设置默认名称

38 publicTimer() {39 this("Timer-" +serialNumber());40 }41

42 //是否设置为守护线程并设置默认名称

43 public Timer(booleanisDaemon) {44 this("Timer-" +serialNumber(), isDaemon);45 }46

47 //给相应线程设置指定名称并开启线程

48 publicTimer(String name) {49 thread.setName(name);50 thread.start();51 }52

53 //设置指定名称以及是否设置为守护线程并开启线程

54 public Timer(String name, booleanisDaemon) {55 thread.setName(name);56 thread.setDaemon(isDaemon);57 thread.start();58 }59

60 //调配任务,设置任务多久后开始

61 public void schedule(TimerTask task, longdelay) {62 if (delay < 0)63 throw new IllegalArgumentException("Negative delay.");64 sched(task, System.currentTimeMillis()+delay, 0);65 }66

67 //调配任务,设置任务什么时候开始

68 public voidschedule(TimerTask task, Date time) {69 sched(task, time.getTime(), 0);70 }71

72 //调配任务,设置任务多久后开始循环执行并间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值