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

百度收录正常网站流量下降石家庄seo推广

百度收录正常网站流量下降,石家庄seo推广,wordpress居中,wordpress公众号获验证码目录定时器是什么标准库中的定时器模拟实现定时器为什么不用阻塞队列中的优先级队列定时器是什么 定时器也是软件开发中的⼀个重要组件. 类似于⼀个 “闹钟”. 达到⼀个设定的时间之后, 就执⾏某个指定任务⽐如⽹络通信中, 如果对⽅ 500ms 内没有返回数据, 则断开连接尝试重连…

目录

  • 定时器是什么
  • 标准库中的定时器
  • 模拟实现定时器
  • 为什么不用阻塞队列中的优先级队列

定时器是什么

  • 定时器也是软件开发中的⼀个重要组件. 类似于⼀个 “闹钟”. 达到⼀个设定的时间之后, 就执⾏某个指定任务
  • ⽐如⽹络通信中, 如果对⽅ 500ms 内没有返回数据, 则断开连接尝试重连

标准库中的定时器

  • 标准库里面提供了一个Timer类, Timer类的核心方法是schedule(安排的意思)
  • schedule包含了个参数, 第一个参数是要执行的任务, 第二个参数是多久后执行(对于现在时间, 单位我为毫秒)
  • 第一个参数要重写TimerTask任务接口的run方法执行任务
  • 定时器里面内置了线程来执行这些任务
public class demo34 {public static void main(String[] args) throws InterruptedException {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello 3000");}}, 3000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello 2000");}}, 2000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello 1000");}}, 1000);System.out.println("hello main");Thread.sleep(4000);timer.cancel();}
}
  • 这里用cancel来结束主线程, 因为我们定时器默认创建的是一个前台线程(也就是非守护线程). 前台线程不结束完, 进程也就不会结束

模拟实现定时器

class MyTimerTask implements Comparable<MyTimerTask>{private Runnable runnable;  //要执行的任务private long time; //任务在什么时候被执行, 以ms为单位public MyTimerTask(Runnable runnable, long delay){this.runnable = runnable;this.time = delay;}//获取到任务在什么时候被执行public long getTime(){return time;}public void run(){runnable.run(); //执行任务}@Overridepublic int compareTo(MyTimerTask o) {return (int)(this.time - o.time);}
}
class MyTimer{  //定时器类private PriorityQueue<MyTimerTask> queue = new PriorityQueue<>(); //以执行时间最早的任务在第一个被执行private Object locker = new Object();public MyTimer(){//创建线程执行任务Thread t = new Thread(() -> {try {while (true) {synchronized (locker) { //这里任务队列, 取任务(写操作) MyTimerTask task = queue.peek(); //取出队首任务while (task == null) {locker.wait(); //如果队列为空, 那么让线程进入等待, 不去一直争抢锁, 忙等task = queue.peek();//唤醒后说明有任务了, 但是由于notify是随机唤醒, 有可能其他线程把任务先拿到, 所以这里获取到了重新while判断队列是否为空}//判断时间是否到达long curTime = System.currentTimeMillis();if(curTime >= task.getTime()){//时间到了task.run();queue.poll(); //执行完毕, 任务移除}else{//时间没到locker.wait(task.getTime() - curTime); //等到指定时间执行}}}}catch (InterruptedException e) {e.printStackTrace();}});t.start();}public void schedule(Runnable runnable, long delay){synchronized (locker){  //这里队任务队列添加任务(写操作)MyTimerTask myTimerTask = new MyTimerTask(runnable, delay);queue.add(myTimerTask);locker.notify(); //添加任务后唤醒线程, 告诉任务队列不为空}}
}

在这里插入图片描述

  • 测试
public class demo35 {public static void main(String[] args) {MyTimer timer = new MyTimer();timer.schedule(() -> {System.out.println("hello 3000");}, 3000);timer.schedule(() -> {System.out.println("hello 2000");}, 2000);timer.schedule(() -> {System.out.println("hello 1000");}, 1000);}
}

为什么不用阻塞队列中的优先级队列

  • 阻塞队列内置了锁, 这个时候我们自己也加了一把锁. 如果形成死锁条件(请求和保持)或者循环等待就成死锁了. 所以我们没必要冲冒这个风险
    在这里插入图片描述
http://www.dtcms.com/a/436319.html

相关文章:

  • asp网站作业下载网站在线统计代码
  • 保安公司网站如何做象山网站建设
  • 英语学习-Saints036
  • 淘客网站开发公司青岛网络公司有哪些
  • php网站开发需要多久做网站都需要哪些费用
  • 石家庄建站外贸网站上海新闻最新消息
  • Mysql速成笔记1(DDL)
  • ps做 网站标准尺寸是多少网站域名使用怎么做待摊分录
  • 如何做好网站建设工作学校网站建设阶段性目标
  • 北京网站建设yi wl什么行业需要做网站
  • 恒网做的网站wordpress邮件设置密码
  • 网站备案阿里云流程长沙网站seo排名
  • 从技术表演到价值落地——从云栖大会透视中国AI商业化落地密码
  • 一键生成原创视频番禺网站排名优化公司
  • 音乐网站怎么做外链怎么查询商标是否已被注册
  • 株洲网站的建设宿迁房产网新楼盘
  • 盐城经济技术开发区建设局网站cocos游戏开发
  • 深圳网站制作哪家专业企业品牌策划推广方案
  • 中国做的比较好的网站设计公司有哪些动漫制作专业认识
  • 某学校网站建设方案论文工信部备案
  • 网站建设公司云南简单的网页制作软件
  • 福建网站备案个人网页制作成品html
  • 商城网站开发培训学校之前做的网站推广怎么删除
  • 无锡企业网站制作策划深圳公司网页设计推广报价
  • 嵌入式软件知识点汇总(day6):常见通信方式(上)
  • 衡阳网站设计ss0734做个人网站怎么赚钱
  • rk3566泰山派uart串口基础使用(应用层)
  • 直播网站功能怎么做东莞专业做网站
  • 判断网站学生做微商怎么加入
  • 商业网站后缀名徐州网站建设 网站推广