参考答案
结论:基于优先队列(最小堆)和单线程轮询实现简单定时器。核心要点:1. 定义任务类包含执行时间戳和执行体Runnable;2. 用PriorityQueue按执行时间升序排序;3. 工作线程循环:取堆顶,若队列空则wait;若时间到期则执行并移除,否则wait(执行时间-当前时间);4. 示例:class Task{ long time; Runnable r; } queue.offer(task); 线程中while(true){ Task t=queue.peek(); if(t==null) wait(); else if(t.time<=System.currentTimeMillis()){ queue.poll(); t.r.run(); } else wait(t.time-now); } 原理:堆保证最近任务在堆顶,wait/notify避免忙等。对比:JDK Timer单线程易阻塞,ScheduledThreadPoolExecutor支持多线程池。