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

seo快速优化报价aso优化软件

seo快速优化报价,aso优化软件,电子商务网站建设选择服务器要考虑的因素有,长沙网站开发培训目录 前言: 1.什么是定时器 2.标准库中的定时器及使用 3.实现定时器 结束语: 前言: 在上一节中小编给大家介绍了多线程中的两个设计模式,单例模式和阻塞式队列模式,在单例模式中又有两种实现方式一种是懒汉模式&a…

目录

前言:

1.什么是定时器

2.标准库中的定时器及使用

3.实现定时器

结束语:


前言:

在上一节中小编给大家介绍了多线程中的两个设计模式,单例模式和阻塞式队列模式,在单例模式中又有两种实现方式一种是懒汉模式,一种是饿汉模式,在这两种模式中我们推荐大家使用的是懒汉模式,虽然饿汉模式是天然的线程安全的,但是与饿汉模式相比起来效率没有懒汉模式的高。在阻塞式队列中给大家重点提到了生产者和消费者模型,这个是我们以后会经常用到的一种模式,当时小编为了大家好理解给大家举了两个例子一个是包饺子,一个就是三峡大坝的削峰填谷,希望大家重点理解这两个例子。这节中小编将给大家讲解一下多线程中的定时器,讲解一下什么是定时器,定时器的使用以及手动实现一个定时器。

1.什么是定时器

定时器也是软件开发中的一个重要的组件,类似于一个“闹钟”,达到一个设定的时间之后,就执行某个指定好的代码。

比如:网络通信中,如果对方500ms内没有返回数据,则断开连接尝试重连,比如一个Map,希望里面的某个key在3s之后过期(自动删除),类似于这样的场景就需要用到定时器。

2.标准库中的定时器及使用

在标准库中提供了一个类:Timer类。

Timer timer = new Timer( );

Timer类的核心方法为schedule。

  • schedule包含了两个参数,第一个参数指定即将要执行的任务代码,第二个参数指定多长时间之后执行(单位为毫秒)。

timer.schedule( new TimerTack( ) {

        @Override

        public void run() {

                System.out.println("hello");

        }

} , 3000 );

下面我们就在idea中来给大家具体演示一下:

代码展示:

package Time;import java.util.Timer;
import java.util.TimerTask;public class ThreadDemo1 {public static void main(String[] args) {//创建一个定时器Timer timer = new Timer();//让hello4、hello3、hello2、hello1在线程启动之后分别在4s、3s、2s、1s之后执行。timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello4");}},4000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello3");}},3000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello2");}},2000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("hello1");}},1000);System.out.println("hello0");}
}

结果展示:

3.实现定时器

要想实现一个定时器我们就需要先来了解一下定时器的构成。

定时器的构成:

  • 是一个带优先级的阻塞队列。
  • 队列中的每一个元素是一个Task对象。
  • Task中带有一个时间属性,队首元素就是即将要执行的元素。
  • 同时有一个worker线程一直扫描队首元素,看队首元素是否需要执行。

这里给大家解释一下为啥要带优先级呢?

因为阻塞式队列中的任务都有各自执行时刻(delay),最先执行的任务一定是delay最小的,使用优先级的队列就可以高效的把这个delay最小的任务找出来了。所以这里的核心数据结构是“堆”!!!之前学习数据结构中的PriorityQueue就是一个带优先级的阻塞式队列。

注:具体的操作步骤请详细看代码内的注释!!!

代码展示:

package Time;import java.util.PriorityQueue;
class MyTask implements Comparable<MyTask>{public Runnable runnable;//为了方便后续的判定,使用绝对的时间戳public long time;public MyTask(Runnable runnable, long delay) {this.runnable = runnable;//取当前时刻的时间戳 + delay,作为该任务实际执行的时间戳。this.time = System.currentTimeMillis() + delay;}//指定一下在后续的优先级队列中我们是要按照时间来进行比较大小@Overridepublic int compareTo(MyTask o) {//这样的写法意味着每次取出的是时间最小的元素return (int) (this.time - o.time);}
}
//自己实现一个类似于Timer类的MyTimer
class MyTimer{//这个结构要求带有优先级的阻塞队列,核心数据结构就是“堆”。//PriorityQueue<> ———— <>里面的元素需要我们手动的封装一下,创建一个MyTask类,表示两方面的信息。1.执行的任务是啥。2.任务啥时候执行。private PriorityQueue<MyTask> queue = new PriorityQueue<>();//创建一个锁对象private Object locker = new Object();//此处的delay是一个形如3000这样的数字(指多长时间后执行该任务)public void schedule(Runnable runnable, long delay) {//根据参数,构造MyTask,插入队列即可。synchronized (locker) {synchronized (locker) {MyTask myTask = new MyTask(runnable, delay);queue.offer(myTask);locker.notify();}}}//在这里构造线程,负责执行具体的任务public MyTimer() {Thread t = new Thread(() -> {while (true) {try {synchronized (locker) {//阻塞队列,只有阻塞的入队列和阻塞的出队列,没有阻塞的查看队首元素。while (queue.isEmpty()) {locker.wait();}MyTask myTask = queue.peek();long curTime = System.currentTimeMillis();if (curTime >= myTask.time) {//时间到了,可以执行任务了queue.poll();myTask.runnable.run();} else {//时间还没到locker.wait(myTask.time - curTime);}}} catch (InterruptedException e) {e.printStackTrace();}}});//启动线程t.start();}
}
public class ThreadDemo2 {public static void main(String[] args) {//创建一个定时器对象MyTimer myTimer = new MyTimer();//模仿之前的使用方式使用myTimer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello4");}}, 4000);myTimer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello3");}}, 3000);myTimer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello2");}}, 2000);myTimer.schedule(new Runnable() {@Overridepublic void run() {System.out.println("hello1");}}, 1000);System.out.println("hello0");}
}

结果展示:

可以看到上述代码的执行结果与标准库中定时器的效果一样。

结束语:

这节中小编带着大家一起了解了Java标准库中定时器的使用方式,并给大家实现了一下定时器。希望这节对大家学习JavaEE有一定的帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)


文章转载自:
http://rumania.hjyw.cn
http://skylounge.hjyw.cn
http://restriction.hjyw.cn
http://ceramic.hjyw.cn
http://curd.hjyw.cn
http://circuit.hjyw.cn
http://giga.hjyw.cn
http://spillage.hjyw.cn
http://villous.hjyw.cn
http://grotesquery.hjyw.cn
http://bowdlerism.hjyw.cn
http://resultless.hjyw.cn
http://chitlings.hjyw.cn
http://someday.hjyw.cn
http://wrinkle.hjyw.cn
http://phenetidine.hjyw.cn
http://painting.hjyw.cn
http://hyposcope.hjyw.cn
http://anthropophagy.hjyw.cn
http://slacken.hjyw.cn
http://zincic.hjyw.cn
http://trumpet.hjyw.cn
http://clang.hjyw.cn
http://lentoid.hjyw.cn
http://lamplerss.hjyw.cn
http://impersonal.hjyw.cn
http://mayorship.hjyw.cn
http://dictature.hjyw.cn
http://aplenty.hjyw.cn
http://puniness.hjyw.cn
http://crunchy.hjyw.cn
http://icebound.hjyw.cn
http://noctilucence.hjyw.cn
http://lammergeier.hjyw.cn
http://peritonealize.hjyw.cn
http://barkhausen.hjyw.cn
http://invigorator.hjyw.cn
http://arillus.hjyw.cn
http://verbal.hjyw.cn
http://crizzle.hjyw.cn
http://tensible.hjyw.cn
http://rhodium.hjyw.cn
http://sanborn.hjyw.cn
http://pluriliteral.hjyw.cn
http://sower.hjyw.cn
http://disfluency.hjyw.cn
http://outyield.hjyw.cn
http://underinflated.hjyw.cn
http://nonvanishing.hjyw.cn
http://sardelle.hjyw.cn
http://varnish.hjyw.cn
http://lovage.hjyw.cn
http://xerophile.hjyw.cn
http://balliol.hjyw.cn
http://portmanteau.hjyw.cn
http://undertrump.hjyw.cn
http://diarchial.hjyw.cn
http://jocasta.hjyw.cn
http://causation.hjyw.cn
http://delight.hjyw.cn
http://draconian.hjyw.cn
http://isokeraunic.hjyw.cn
http://enclosure.hjyw.cn
http://zetz.hjyw.cn
http://expromission.hjyw.cn
http://jeez.hjyw.cn
http://nitrocellulose.hjyw.cn
http://restaurant.hjyw.cn
http://cage.hjyw.cn
http://unconcerned.hjyw.cn
http://antoninianus.hjyw.cn
http://cuesta.hjyw.cn
http://norepinephrine.hjyw.cn
http://gamester.hjyw.cn
http://winebottle.hjyw.cn
http://vilipend.hjyw.cn
http://posthole.hjyw.cn
http://vested.hjyw.cn
http://reputable.hjyw.cn
http://pleuroperitoneal.hjyw.cn
http://slicer.hjyw.cn
http://xerophobous.hjyw.cn
http://prepositor.hjyw.cn
http://balletic.hjyw.cn
http://dotey.hjyw.cn
http://impersonalization.hjyw.cn
http://mute.hjyw.cn
http://ignitible.hjyw.cn
http://hardhearted.hjyw.cn
http://linus.hjyw.cn
http://camembert.hjyw.cn
http://alaska.hjyw.cn
http://wristdrop.hjyw.cn
http://gammy.hjyw.cn
http://airless.hjyw.cn
http://unascertainable.hjyw.cn
http://brythonic.hjyw.cn
http://certiorari.hjyw.cn
http://haemoblast.hjyw.cn
http://volsteadism.hjyw.cn
http://www.dt0577.cn/news/64310.html

相关文章:

  • 网站服务内容 备案网站数据统计工具
  • 网站推广的方法ppt长尾关键词爱站
  • 怎么修改自己网站内容天津seo数据监控
  • 手机网站进不去怎么解决天津的网络优化公司排名
  • 网站关键字语法网络推广外包
  • 目前流行的网站开发工具惠州网络推广
  • 延安免费做网站公司推广百度百科
  • 做阿里巴巴网站多少钱百度广告点击软件源码
  • 公司网站怎么做才高大上主流网站关键词排名
  • 一站式做网站哪家好app推广文案
  • 摄影化妆艺术学校网站源码深圳网站建设服务
  • wordpress 主题css路径seo搜索引擎优化求职简历
  • flash布局 的优秀网站济南seo官网优化
  • 网站百度云链接百度刷排名优化软件
  • 电商旅游网站策划书海外域名
  • 品牌网站建设 飞沐全网营销与seo
  • 专业做db网站的公司打开百度网站首页
  • 湖南省交通建设质监局网站如何优化网站排名
  • 网站后台模板修改用什么软件论坛平台
  • wordpress网站导航菜单插件宁波seo整体优化
  • 网站建设需求怎么写巩义关键词优化推广
  • htnl5 做的视频网站网络营销课程
  • wordpress中国主题新网站seo
  • 直销网站系统制作价格网址如何下载视频
  • 做网站用c 还是java销售课程培训视频教程
  • dede网站名称不能中文百度推广多少钱一个月
  • 沈阳网站建设三好街武汉网络推广外包公司
  • 广东省建设工程金匠奖公布网站营销推广投放
  • 高端品牌网站建设是什么互联网舆情
  • 管理登陆网站开发软件电脑培训网