定时器的基本概念
定时器的功能:顾名思义是定时。给定一个时间,根据这个事件为间隔,来汇率的完成一些事情。
定时器的具体实现思路:
- 开辟一个线程来起到定时的作用,lock有专门的方法来实现让该线程沉睡一段时间,然后时间到达之后,由JVM来唤醒该线程,且只会唤醒由lock.wait(long time)方法引起的线程沉睡,不会使所有处在阻塞态的线程都被唤醒。
- 1中的线程单纯只起到定时的作用,此时使用一个内部类来产生第二个线程,功能是只用来执行方法。
- 让这两个线程使用同一把锁来控制多线程的执行顺序问题。(在别的环境下还可以通过使用一个众所周知的东西作为公共锁,从而保证多线程安全问题。)
- 这个执行方法可以让使用者来实现,因此通过一个接口来实现,并且在构造方法中给出给该接口成员赋值的方法。甚至还可以增加当该接口成员为null时报错的判断,都可以根据应用场合来实现相关功能(这里不实现报错功能)。
定时器的具体代码实现
以下是所涉及到的所有类和接口
DiDa类是核心功能实现的类
public class DiDa implements Runnable{
//此为默认的沉睡时间,在构造方法中可以进行重新赋值,也可以通过setDelayTime()来修改
private static final long DEFAULT_DELAY_TIME = 1000;
private long delayTime;
//这个接口有一个方法doSomething()
private IAction action;
//volatile是指防止该成员变量被回收
private volatile boolean goon;
//这就是控制两个线程同步的公共锁,在构造方法中被实例化
private Object lock;
public DiDa() {
this(DEFAULT_DELAY_TIME);
}
public DiDa(long delayTime) {
this(null, delayTime);
}
public DiDa