定时器
约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见)
客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里"等待的最大时间"可以用定时器的方式实现。
标准库中有现成的定时器实现:

主线程执行schedule方法的时候,就是把这个任务放到timer对象中。
timer里面本身也含一个线程------>"扫描线程"
时间到了,扫描线程就会执行刚才安排的任务
执行完任务之后,进程并未结束,timer内部的线程阻止了进程的结束。
timer里面也可安排多个任务
java
public class Demo28 {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("执行第四个任务");
}
},4000);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("执行第三个任务");
}
},3000);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("执行第二个任务");
}
},2000);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("执行第一个任务");
}
},1000);
System.out.println("程序启动!");
}
}

阻止结束,但是我们可以加timer自带的cancel()方法来结束线程


自己实现一个定时器
1.Timer里面需要有一个线程,扫描任务是否到时间
2.需要有一个数据结构来保存所有的任务
3.需要创建一个类,通过类的对象来描述一个任务。(至少包括任务的内容和时间)
由于任务都带有一个时间的先后顺序,所以我们采用优先级队列的数据结构来实现。
MyTimerTask

MyTimer

线程安全

main

