首先创建一个定时器类MyTimer和一个任务类Task(具体任务,和多久开始跑任务)
任务类Task先实现这些基本字段和构造方法
定时器里面定义一个优先级队列来放这些任务(本质最小堆,把时间最短的任务放在最上面,达到拿取任务为最近任务目的),写一个schedule方法来把这些任务put进队列
说明一下BlockingQueue是线程安全的并且实现了带有优先级队列的版本
具体实现内容就是传入任务和多久时间的参数,里面实例化一个任务,再将任务put进最小堆里.
但由于不知道队首元素是否为时间最小的任务,所以需要在定时器里创建一个扫描线程来不停地扫描这个优先级阻塞队列队首是否为最小值(因为不知道操作系统是否在这段时间又添加了新任务而且时间还更早)
用lambda表达式创建扫描线程,一个while(true)循环take取出队首元素 再把当前时间与设定时间比较(可能会报错,原因后面解释)根据结果判断时间是否到了来