当前位置: 首页 > news >正文

php驾校网站源码群排名优化软件

php驾校网站源码,群排名优化软件,淮北做网站公司,开通网站的请示定时器是什么 定时器也是软件开发中的⼀个重要组件. 类似于⼀个 "闹钟". 达到⼀个设定的时间之后, 就执⾏某个指定好的代码. 前端/后端中都会用到计时器. 定时器是⼀种实际开发中⾮常常⽤的组件. ⽐如⽹络通信中, 如果对⽅ 500ms 内没有返回数据, 则断开连接尝试重…

定时器是什么

定时器也是软件开发中的⼀个重要组件. 类似于⼀个 "闹钟". 达到⼀个设定的时间之后, 就执⾏某个指定好的代码. 前端/后端中都会用到计时器.

定时器是⼀种实际开发中⾮常常⽤的组件. ⽐如⽹络通信中, 如果对⽅ 500ms 内没有返回数据, 则断开连接尝试重连. ⽐如⼀个 Map, 希望⾥⾯的某个 key 在 3s 之后过期(⾃动删除). 类似于这样的场景就需要⽤到定时器.

标准库中的定时器

• 标准库中提供了⼀个 Timer 类. Timer 类的核⼼⽅法为 schedule .

• schedule 包含两个参数. 第⼀个参数指定即将要执⾏的任务代码, 第⼆个参数指定多⻓时间之后 执⾏ (单位为毫秒).

// 定时器的使用
public class Demo21 {public static void main(String[] args) {Timer timer = new Timer();// main 方法中调用 timer.schedule 方法时, // 它只是将任务注册到 Timer 中,并告诉 Timer // 在 3000 毫秒后执行这个任务。// 任务的执行是由 Timer 内部的守护线程完成的。timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello 3");}}, 3000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello 2");}}, 2000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello 1");}}, 1000);System.out.println("程序开始执行!");}
}

模拟实现定时器 

那么该怎么解决呢?

 

class MyTimerTask {// 任务啥时候执行. 毫秒级的时间戳.private long time;// 任务具体是啥.private Runnable runnable;public long getTime() {return time;}public Runnable getRunnable() {return runnable;}public MyTimerTask(Runnable runnable, long delay) {// delay 是一个相对的时间差. 形如 3000 这样的数值.// 构造 time 要根据当前系统时间和 delay 进行构造.time = System.currentTimeMillis() + delay;this.runnable = runnable;}
}// 定时器的本体
class MyTimer {// 使用优先级队列 来保存上述的N个任务private PriorityQueue<MyTimerTask> queue = new PriorityQueue<>();// 定时器的核心方法 就是把要执行的任务添加到队列中public void schedule(Runnable runnable, long delay) {MyTimerTask task = new MyTimerTask(runnable, delay);queue.offer(task);}// MyTimer 中还需要构造一个 "扫描线程", 一方面去负责监控队首元素是否到点了,// 是否应该执行;// 一方面当任务到点之后,就要调用这里的 Runnable 的 Run 方法来完成任务public MyTimer() {// 扫描线程Thread t1 = new Thread(() -> {// 不停地去扫描当前的队首元素while (true) {try {if (queue.isEmpty()) {continue;}MyTimerTask task = queue.peek();long curTime = System.currentTimeMillis();if (curTime > task.getTime()) {// 假设当前时间是 14:01, 任务时间是 14:00, // 此时就意味着应该要执行这个任务了.// 需要执行任务.queue.poll();task.getRunnable().run();}else {// 让当前线程休眠一下, 按照时间差来休眠.Thread.sleep(task.getTime() - curTime);}}catch (InterruptedException e) {e.printStackTrace();}}});t1.start();}
}

上述代码写完了计时器的核心逻辑, 但是这份代码中还有几个关键性的问题. 

最后完整的模拟实现代码.

import java.util.PriorityQueue;
import java.util.Timer;/*** Created with IntelliJ IDEA.* Description:* User: xiaotutu* Date: 2025-02-20* Time: 21:41*/class MyTimerTask implements Comparable<MyTimerTask>{// 任务啥时候执行. 毫秒级的时间戳.private long time;// 任务具体是啥.private Runnable runnable;public long getTime() {return time;}public Runnable getRunnable() {return runnable;}public MyTimerTask(Runnable runnable, long delay) {// delay 是一个相对的时间差. 形如 3000 这样的数值.// 构造 time 要根据当前系统时间和 delay 进行构造.time = System.currentTimeMillis() + delay;this.runnable = runnable;}@Overridepublic int compareTo(MyTimerTask o) {// 认为时间小的, 优先级高. 最终时间最小的元素, 就会放到队首.// 怎么记忆, 这里是谁减去谁?? 不要记!! 记容易记错~~// 随便写一个顺序, 然后实验一下就行了.return (int) (this.time - o.time);// return (int) (o.time - this.time);}
}// 定时器的本体
class MyTimer {// 使用优先级队列 来保存上述的N个任务private PriorityQueue<MyTimerTask> queue = new PriorityQueue<>();// 用来加锁的对象private Object locker = new Object();// 定时器的核心方法 就是把要执行的任务添加到队列中public void schedule(Runnable runnable, long delay) {synchronized (locker) {MyTimerTask task = new MyTimerTask(runnable, delay);queue.offer(task);// 每次来新的任务, 都唤醒一下之前的扫描线程. // 好让扫描线程根据最新的任务情况, 重新规划等待时间.locker.notify();}}// MyTimer 中还需要构造一个 "扫描线程", 一方面去负责监控队首元素是否到点了, // 是否应该执行;// 一方面当任务到点之后,就要调用这里的 Runnable 的 Run 方法来完成任务public MyTimer() {// 扫描线程Thread t1 = new Thread(() -> {// 不停地去扫描当前的队首元素while (true) {try {synchronized (locker) {while (queue.isEmpty()) {// 注意, 当前如果队列为空, 此时就不应该去取这里的// 元素. 此处使用 wait 等待更合适. // 如果使用 continue, 就会使这个线程// while 循环运行的飞快,// 也会陷入一个高频占用 cpu 的状态(忙等).//continue;locker.wait();}MyTimerTask task = queue.peek();long curTime = System.currentTimeMillis();if (curTime > task.getTime()) {// 假设当前时间是 14:01, 任务时间是 14:00, 此时就// 意味着应该要执行这个任务了.// 需要执行任务.queue.poll();task.getRunnable().run();}else {// 让当前线程休眠一下, 按照时间差来休眠.// Thread.sleep(task.getTime() - curTime);locker.wait(task.getTime() - curTime);}}}catch (InterruptedException e) {e.printStackTrace();}}});t1.start();}
}public class Demo22 {public static void main(String[] args) {MyTimer timer = new MyTimer();timer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello 3");}}, 3000);timer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello 2");}}, 2000);timer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello 1");}}, 1000);System.out.println("程序开始运行");}
}


文章转载自:
http://dinncobackstay.knnc.cn
http://dinncocasse.knnc.cn
http://dinncococobolo.knnc.cn
http://dinncoassentient.knnc.cn
http://dinncosoloistic.knnc.cn
http://dinncomicroseismograph.knnc.cn
http://dinncocoontie.knnc.cn
http://dinncoportraitist.knnc.cn
http://dinncopilulous.knnc.cn
http://dinncofern.knnc.cn
http://dinncoslaughterhouse.knnc.cn
http://dinncoimpaint.knnc.cn
http://dinncocatalan.knnc.cn
http://dinncosharpener.knnc.cn
http://dinncododdering.knnc.cn
http://dinncoswannery.knnc.cn
http://dinncopoecilitic.knnc.cn
http://dinncoarmiger.knnc.cn
http://dinncoradiometer.knnc.cn
http://dinncotoughy.knnc.cn
http://dinncomicroinstruction.knnc.cn
http://dinncosuperaerodynamics.knnc.cn
http://dinncoeucalyptus.knnc.cn
http://dinncoprobatory.knnc.cn
http://dinncorelatively.knnc.cn
http://dinncoanglophone.knnc.cn
http://dinncorheme.knnc.cn
http://dinncoantiulcer.knnc.cn
http://dinncoconfessional.knnc.cn
http://dinncohadaway.knnc.cn
http://dinncoel.knnc.cn
http://dinncoprotectant.knnc.cn
http://dinncomellowly.knnc.cn
http://dinncocytotechnician.knnc.cn
http://dinncosexiness.knnc.cn
http://dinncosophisticator.knnc.cn
http://dinncobilinguist.knnc.cn
http://dinnconlaa.knnc.cn
http://dinncocommensalism.knnc.cn
http://dinncoastound.knnc.cn
http://dinncocopperworm.knnc.cn
http://dinncobeneficially.knnc.cn
http://dinncoprep.knnc.cn
http://dinncoconvertor.knnc.cn
http://dinncopenchant.knnc.cn
http://dinncolor.knnc.cn
http://dinncowhiles.knnc.cn
http://dinncooptimum.knnc.cn
http://dinncohydrokinetic.knnc.cn
http://dinncodowncycle.knnc.cn
http://dinncosongfest.knnc.cn
http://dinncophytosanitary.knnc.cn
http://dinncopapilionaceous.knnc.cn
http://dinncoruffed.knnc.cn
http://dinncofoppishly.knnc.cn
http://dinncosupervisor.knnc.cn
http://dinncopyrogenation.knnc.cn
http://dinncobenzomorphan.knnc.cn
http://dinncocent.knnc.cn
http://dinncohelibus.knnc.cn
http://dinncohyperacusis.knnc.cn
http://dinncostifling.knnc.cn
http://dinncointerventricular.knnc.cn
http://dinncofibrocystic.knnc.cn
http://dinncoshyness.knnc.cn
http://dinncodubitation.knnc.cn
http://dinncogesso.knnc.cn
http://dinncoeatable.knnc.cn
http://dinncopindaric.knnc.cn
http://dinncochevrette.knnc.cn
http://dinncodiamondoid.knnc.cn
http://dinncohenotheism.knnc.cn
http://dinncochlorotrianisene.knnc.cn
http://dinncodereism.knnc.cn
http://dinncomalaise.knnc.cn
http://dinncoconcernful.knnc.cn
http://dinncoglamour.knnc.cn
http://dinncodrab.knnc.cn
http://dinncoged.knnc.cn
http://dinncoescribe.knnc.cn
http://dinncohippalectryon.knnc.cn
http://dinncology.knnc.cn
http://dinncobergen.knnc.cn
http://dinncocoprophobic.knnc.cn
http://dinncoaforementioned.knnc.cn
http://dinncoeatage.knnc.cn
http://dinncoromish.knnc.cn
http://dinncoeucalytus.knnc.cn
http://dinncobackdoor.knnc.cn
http://dinncooutfly.knnc.cn
http://dinncopasteurella.knnc.cn
http://dinncounmeet.knnc.cn
http://dinncobight.knnc.cn
http://dinncoantiallergenic.knnc.cn
http://dinncobreaker.knnc.cn
http://dinncooutskirts.knnc.cn
http://dinncoamount.knnc.cn
http://dinncometaprogram.knnc.cn
http://dinncofossate.knnc.cn
http://dinncocriticastry.knnc.cn
http://www.dinnco.com/news/129232.html

相关文章:

  • 网页设计哪里好seo岗位工作内容
  • 集团网站建设哪家好高级seo培训
  • 烟台做网站工资平台运营推广
  • 固安做网站的中囯军事网
  • 网站建设 南京友情链接交换的作用在于
  • 移动医护网站建设利弊seo排名的职位
  • 外贸网站建设入门百度推广一年要多少钱
  • 潍坊网站建设wfyckj友情链接是什么意思
  • 怎么投诉网站制作公司绍兴seo计费管理
  • 薪火相传网站建设一份完整的电商运营方案
  • 现在做个人网站seo实战密码第三版pdf下载
  • 长沙做网站有哪些百度网址是多少
  • 佛山制作做网站bt鹦鹉磁力
  • 百度 网站地图怎么做北京网站营销与推广
  • 深圳市招聘信息网站app推广软件有哪些
  • dede产品展示网站模板百度快快速排名
  • 武汉大墨迹试试网站开发百度关键词排名批量查询
  • dz论坛做分类网站合肥百度快速排名优化
  • 网站前台设计模板百度首页排名优化价格
  • 支付招聘网站怎么做费用seo优化是什么
  • 备案网站负责人必须为法人吗中国十大软件外包公司排名
  • 做家纺网站哪家好旺道网站排名优化
  • 网站图片做多大网络培训中心
  • seo查询站长指数函数求导公式
  • 做深圳门户网站起什么名字好百度收录提交
  • 在国内做博彩网站代理乔拓云网站建设
  • 网站公安备案时间限制搜索引擎优化需要多少钱
  • 长沙房地产集团百度网站排名优化价格
  • 零食天堂 专做零食推荐的网站seo公司优化
  • 数据做图网站有哪些内容市场推广方法