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

上海网站建设制作百橙聚合页做的比较好的教育网站

上海网站建设制作百橙,聚合页做的比较好的教育网站,建网站 方法,公司网站需求说明书目录 前言#xff1a; 1.什么是定时器 2.标准库中的定时器及使用 3.实现定时器 结束语#xff1a; 前言#xff1a; 在上一节中小编给大家介绍了多线程中的两个设计模式#xff0c;单例模式和阻塞式队列模式#xff0c;在单例模式中又有两种实现方式一种是懒汉模式 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 ComparableMyTask{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 PriorityQueueMyTask 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://www.w-s-a.com/news/247452/

相关文章:

  • 网页设计网站哪个公司好学网站开发要多少钱
  • 商务网站建设ppt做视频分享网站
  • WordPress网站根目录有哪些wordpress用户等级
  • 私人装修接单网站重庆制作企业网站
  • 易企秀网站怎么做轮播图什么是网站版面布局
  • 网站开发先写什么后写什么做网站公司专业
  • 中山网站建设文化外贸公司的网站建设模板
  • 美食网站开发开题报告wordpress第三方支付接口
  • 有哪些网站可以卖自己做的图片简洁大方的网站首页
  • 四川建设网电子招投标网站网站酷站
  • 凯里网站建设如何收费网站建设php怎么安装
  • 网站建设专业网站设计公司物格网一站式建站价格
  • seo网站培训优化怎么做如何给网站做下载附件
  • php网站建设文献综述怎么样提高网站排名
  • 专用车网站建设wordpress半透明
  • 石狮网站建设哪家好wordpress 3.9 漏洞
  • 为何建设单位网站找网络推广策畿
  • 用网站模板做网站动漫制作专业学校前十名
  • 网页 代码怎么做网站网站建设与维护课程设计
  • 网站制作哪家公司好企业名录联系电话
  • 做的网站怎么上传到网上wordpress图片之间空一行
  • 腾讯云建设网站视频vi报价单
  • 个人网站发布怎么做建设银行网站收款怎么打明细
  • 网站整体色调网站建设都有什么类型
  • 比较简洁大方的网站软件工程四大方向
  • 大家称赞的网站建设常德小学报名网站
  • 做网站怎么建文件夹百度网盘搜索神器
  • 企业有域名怎么做网站淘宝推广平台
  • 学网站开发去哪学药品销售推广方案
  • 哔哩哔哩h5播放器深圳网站seo外包公司哪家好