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

免费网站建设凡科国内知名商业设计公司

免费网站建设凡科,国内知名商业设计公司,网页制作工具常见的有哪些,企业网站名称怎么写目录 1.什么是定时器 2.计时器的使用 3.手搓定时器 3.1定义一个TimerTask类 3.2定义一个Timer类 3.3实现schedule方法 3.4实现Timer的构造方法 3.4.1随时随地查看优先级队列中是否有任务要执行 3.4.2获取队首任务#xff0c;并判断是否到执行时间 3.4.3到达执行时间…目录 1.什么是定时器 2.计时器的使用 3.手搓定时器 3.1定义一个TimerTask类 3.2定义一个Timer类 3.3实现schedule方法 3.4实现Timer的构造方法 3.4.1随时随地查看优先级队列中是否有任务要执行 3.4.2获取队首任务并判断是否到执行时间 3.4.3到达执行时间执行任务 4.整体的一个代码 ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         1.什么是定时器 在看警匪片时经常会有匪徒在银行安装定时炸弹而这里的定时炸弹就可以看成一个定时器当设定的时间到时炸弹就会爆炸而我们这里的定时器是当时间到时就会执行相应的任务 2.计时器的使用 在Java中关于计时器的类时Timer Timer类是java.util包提供的API。 Timer中最主要的方法是schedule方法他是将我们的任务和时间放进一个数组模拟的队列中然后在指定时间执行指定的任务 代码示例 import java.util.Timer; import java.util.TimerTask;public class Main19 {public static void main(String[] args) {Timer timernew 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);} } schedule的第一个参数类型是TimerTask这个类他继承了Runnable类然后第二个参数是当前程序运行多少时间执行这个任务单位是ms 3.手搓定时器 简单介绍完java中的Timer的使用下面我们就来模拟实现一个定时器 整体的一个思路 1.定义任务类TimerTask用来存储每一个任务的属性如执行的时间以及要执行的任务 2.定义一个Timer类定时器每一个任务执行的先后顺序以及执行过程中的一些细节问题 3.1定义一个TimerTask类 class TimerTask{private Runnable task;private long time;public TimerTask(Runnable task, long time) {this.task task;this.time time;} } 在这个类中成员属性分别为要执行的任务以及任务执行的时间还有一个构造方法 3.2定义一个Timer类 class Timer{private PriorityQueueTimerTaskqueuenew PriorityQueue();public void schedule(Runnable task,long time){}public Timer() {Thread tnew Thread(()-{});t.start(); }} 1.在这个类中有一个优先级队列这个是用来给各个任务执行的先后顺序进行排序的 2.schedule是用来将我们要执行的任务添加到优先级队列当中的 3.Timer这个构造方法是我们在创建这个类时他就开启了一个线程这个线程是用来按时间执行我们队列中的任务的如果线程中有任务他就在指定时间去执行如果没有任务他就阻塞等待 3.3实现schedule方法 锁对象 Object locknew Object(); schedule方法  public void schedule(Runnable task,long delay){synchronized (lock){TimerTask timerTasknew TimerTask(task, System.currentTimeMillis()delay);queue.offer(timerTask);}} 1.我们实例化一个TimerTask的对象然后将schedule的参数作为任务以及时间传递给TimerTask的构造方法作为参数注意的是这里构造方法接收的时间是任务执行的时间而schedule参数的时间是任务距离调用schedule调用时相差的时间所以构造方法参数的时间我们要用当前时间加上延迟的时间获取当前时间System.currentTimeMillis() 2.得到TimerTask这个对象后我们要将这个对象添加到优先级队列当中 3.在实例化Timer时构造方法也会启动一个线程所以我们这是一个多线程的程序为了保证线程安全我们给其加上一个锁 因为我们向优先级队列中添加的是我们自定义的类他不知道该怎么对齐进行排序所以我们要对TimerTask这个类定义一个比较规则 class TimerTask implements ComparableTimerTask{Overridepublic int compareTo(TimerTask o) {return (int)(this.time-o.time);} }我们将TimerTask实现一个Comparable接口并重写Comparaable接口里面的comparaeTo方法又因为我们想让时间近的任务放在队首所以我们的比较规则是为了实现一个小根堆如果this.time-o.time是一个整数就会将小的任务放在前面然而我们的时间是long类型我们需要将this.time-o.time的值强转为int类型 3.4实现Timer的构造方法 3.4.1随时随地查看优先级队列中是否有任务要执行 public Timer() {Thread tnew Thread(()-{while(true){try {synchronized (lock){while(queue.isEmpty()){lock.wait();}}} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();} 1.第一个while循环是当一次任务执行完毕再次查看队列中是否有要执行的任务 2.第二个while循环是查看队列中是否有任务如果没有任务我们就阻塞等待直到schedule被调用时我们这里的wait被唤醒然后进行接下来的操作 3.wait一般搭配synchronized来使用保证线程安全 为了在队列为空时向队列中添加任务后需要将wait唤醒所以在schedule方法中要加上notify public void schedule(Runnable task,long delay){synchronized (lock){TimerTask timerTasknew TimerTask(task, System.currentTimeMillis()delay);queue.offer(timerTask);lock.notify();}} 3.4.2获取队首任务并判断是否到执行时间 TimerTask taskqueue.peek();if(System.currentTimeMillis()task.getTime()){lock.wait(task.getTime()-System.currentTimeMillis());} 1.获取队首任务使用peek而不使用poll 2.如果未到达执行时间我们就阻塞等待任务执行时间和当前时间之间的时差 3.如果在这个阻塞等待的时间段内使用schedule向队列中添加了一个比当前任务更早的任务schedule中的notify会将我们这里的带时间的wait唤醒然后重新获取队列中的队首任务 3.4.3到达执行时间执行任务 if(System.currentTimeMillis()task.getTime()){lock.wait(task.getTime()-System.currentTimeMillis());}else {task.run();queue.poll();} 1.这里使用else也就是当当前系统时间大于等于任务执行的时间执行任务 2.如果不使用else当在等待过程中新插入一条任务那么就会解除阻塞执行run和poll从而导致程序出错 task.run方法需要我们在TimerTask类中进行实现 public void run(){task.run();} 4.整体的一个代码 package Demo4;import java.util.PriorityQueue;class TimerTask implements ComparableTimerTask{private Runnable task;private long time;public TimerTask(Runnable task, long time) {this.task task;this.time time;}public void run(){task.run();}public long getTime() {return time;}Overridepublic int compareTo(TimerTask o) {return (int)(this.time-o.time);} }class Timer{private PriorityQueueTimerTaskqueuenew PriorityQueue();Object locknew Object();public void schedule(Runnable task,long delay){synchronized (lock){TimerTask timerTasknew TimerTask(task, System.currentTimeMillis()delay);queue.offer(timerTask);lock.notify();}}public Timer() {Thread tnew Thread(()-{while(true){try {synchronized (lock){while(queue.isEmpty()){lock.wait();}TimerTask taskqueue.peek();if(System.currentTimeMillis()task.getTime()){lock.wait(task.getTime()-System.currentTimeMillis());}else { task.run(); queue.poll();}}} catch (InterruptedException e) {throw new RuntimeException(e);}}});t.start();}}public class Main10 {public static void main(String[] args) {Timer timernew Timer();timer.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 3000);}},3000);timer.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 2000);}},2000);timer.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 1000);}},1000);} }完结  ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​
http://www.dnsts.com.cn/news/224156.html

相关文章:

  • 泰安网站建设最好做企业网站用什么cms好
  • 凡客建站手机版下载中国十大公关公司
  • 代刷网站推广链接快手网页设计实验报告3000
  • 用python做的网站多吗新开发的聊天软件
  • 网站建设运转湖北企业模板建站信息
  • 网站的推广优化蝶恋直播视频在线观看
  • 做网站最简单的方法燕窝网站怎么做的
  • 可以更改上传到网站的文件内容吗企业邮箱申请理由
  • 和17做网店类似的货源网站网站开发百度云
  • 高校文明建设网站wordpress 批量换
  • 电商网站用php做的吗怎样开电商
  • 广州led网站建设wordpress 优化
  • wordpress页面找不到该网页网站标题优化工具
  • 云南装饰公司做网站网站开发公司 网站空间
  • 专门做奢侈品的网站有哪些iis6cgi php网站缓存
  • 网站建设有什么职位wordpress varinsh
  • 自己怎样做淘客网站北京市建设工程交易信息网官网
  • 网站备案 邮寄资料查询网站有哪些导入链接及数量
  • 冀州网站优化中国纪检监察报什么级别
  • 凡科申请的网站和qq空间一样吗上海工程信息网市在建工程网
  • 做网站需要具备什么要求新浪sae安装wordpress
  • 公司网站建设费计入哪个科目2015军考网站建设
  • 百度seo网站排名优化浙大企业管理培训课程
  • wordpress 企业建站网络营销专业职业规划
  • 万能素材东莞优化哪家好
  • 网站信息内容建设自查报告网站做伪原创收录
  • 网站横幅怎么制作教程武昌做网站哪家专业
  • 企业模板网站怎么做最好看的电视剧大全免费观看免费
  • 平面设计跟网站建设宿迁房产网新楼盘
  • 网站开发应用一台服务做两个网站吗