目录
1.定时器
定时器类似于一个闹钟,进行定时,在一定时间后,被唤醒并执行某个之前设定好的任务
java标准库中提供了一个定时器(java.util.Timer),核心方法只有一个schedulle,有两个参数:任务是啥,多长时间后执行
import java.util.Timer;
import java.util.TimerTask;
public class Demo9 {
public static void main(String[] args) {
Timer timer = new Timer();
//schedele里面有两个参数,一个是描述任务,一个时设置时间
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("my task");
}
},3000);
System.out.println("main");
}
}
2.自己实现一个定时器
想要实现一个定时器,我们就必须要了解Timer内部都需要什么东西?
①描述一个任务
②组织任务
③执行时间到了的任务
2.1执行任务
创建一个专门的类来表示一个定时器中的任务(TimerTask)
2.2组织任务
使用一定的数据结构把一些任务放到一起,这里我们可以思考,安排任务的时候我们可以是无序的,例如先安排半小时之后干什么,然后在安排十分钟之后干什么,安排任务的时间是随机的,但是执行任务的顺序并不是随机的,肯定是时间小的先执行,不仅如此,此处的数据结构还要考虑线程安全问题,可能在多个线程里进行注册任务
在这里我们使用 PriorityBlockingQueue 作为组织任务的数据结构
2.3执行时间到了的任务
需要有一个线程不停的去检查当前优先队列的队首元素,看看当前最靠前的任务是不是时间到了