2026/4/20 8:56:17
网站建设
项目流程
平台制作网站公司,wordpress 文件服务,如何做内网站的宣传栏,wordpress适合seo标准库中计时器的使用
Timer类的实例化对象TimerTask类的是实例化对象–在run方法中存放运行的代码延迟的时间#xff08;相对时间#xff0c;相对于当前时间之后的多少毫秒等#xff09;
时间需要安排schedule
public static void main(String[] args) {System.out.println…标准库中计时器的使用Timer类的实例化对象TimerTask类的是实例化对象–在run方法中存放运行的代码延迟的时间相对时间相对于当前时间之后的多少毫秒等时间需要安排schedulepublic static void main(String[] args) { System.out.println(From now on,after 4s will print a word); Timer timernew Timer(); timer.schedule(new TimerTask(){ public void run(){ System.out.println(LOVE); } },4000); }自定义一个计时器基本构成两量PriorityBlockingQueueObject mailBox两类MyTimeTaskWorker两方法MyTimer()schedule()两量PriorityBlockingQueue计时器的核心使用优先级队列来存储计时器执行的基本单位TimeTask因为需要按照时间顺序一一执行对应的Taskprivate PriorityBlockingQueueTask queue new PriorityBlockingQueue();Object mailBox协调线程和work线程等待的同步对象为实现多线程顺序执行提供锚点(“系铃人”)。private Object mailBox new Object();两类MyTimeTask计时器的基本单元两变量- Runnable command需要特定时间执行的代码- long time用于存储绝对时间三方法- 构造方法存储执行代码将存入的相对时间转换为绝对时间static class Task implements ComparableTask { private Runnable command; private long time; public Task(Runnable command, long time) { this.command command; // time 中存的是绝对时间, 超过这个时间的任务就应该被执行 this.time System.currentTimeMillis() time; } public void run() { command.run(); } Override public int compareTo(Task o) { // 谁的时间小谁排前面 return (int) (time - o.time); } }Worker继承于线程用于执行相关的代码class Worker extends Thread { Override public void run() { while (true) { try { Task task queue.take(); long curTime System.currentTimeMillis(); if (task.time curTime) { // 时间还没到, 就把任务再塞回去 queue.put(task); synchronized (mailBox) { // 指定等待时间 wait mailBox.wait(task.time - curTime); } } else { // 时间到了, 可以执行任务 task.run(); } } catch (InterruptedException e) { e.printStackTrace(); break; } } } }两方法MyTimer()构造方法启动运行代码的workpublic MyTimer() { // 启动 worker 线程 Worker worker new Worker(); worker.start(); } // schedule 原意为 安排 public void schedule(Runnable command, long after) { Task task new Task(command, after); queue.offer(task); synchronized (mailBox) { mailBox.notify(); } }schedule()“安排”方法用于添加新的执行代码和相对等待时间public void schedule(Runnable command, long after) { Task task new Task(command, after); queue.offer(task); synchronized (mailBox) { mailBox.notify(); } }