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

技术支持 光速东莞网站建设佛山英文网建站

技术支持 光速东莞网站建设,佛山英文网建站,wordpress文章显示时间,网站设置右击不了如何查看源代码目录 1.定时器的定义 2.标准库中的定时器 2.1构造方法 2.2成员方法 3.模拟实现一个定时器 schedule()方法 构造方法 4.MyTimer完整代码 1.定时器的定义 定时器也是软件开发中的一个重要组件. 类似于一个 闹钟. 达到一个设定的时间之后, 就执行某个指…目录 1.定时器的定义  2.标准库中的定时器 2.1构造方法 2.2成员方法  3.模拟实现一个定时器  schedule()方法 构造方法  4.MyTimer完整代码 1.定时器的定义  定时器也是软件开发中的一个重要组件. 类似于一个 闹钟. 达到一个设定的时间之后, 就执行某个指定好的代码. 定时器是一种实际开发中非常常用的组件.类似于下方的场景就需要用到定时器 比如网络通信中, 如果对方 500ms 内没有返回数据, 则断开连接尝试重连.比如一个 Map, 希望里面的某个 key 在 3s 之后过期(自动删除). 2.标准库中的定时器 2.1构造方法 名称作用Timer()创建一个新的定时器Timer(boolean isDaemon)创建一个新的定时器其相关线程可以指定为 run as a daemonTimer(String name)创建一个新的定时器其相关线程具有指定的名称Timer(String name, boolean isDaemon)创建一个新的定时器其相关线程具有指定的名称可指定为run as a daemon 2.2成员方法  方法名作用void cancel()  终止此计时器丢弃任何当前计划的任务。int purge()从该计时器的任务队列中删除所有取消的任务。 void schedule(TimerTask task, Date time)   在指定的时间安排指定的任务执行。 void schedule(TimerTask task, Date firstTime, long period)   从指定 的时间开始 对指定的任务执行重复的 固定延迟执行 。 void schedule(TimerTask task, long delay)  在指定的延迟之后安排指 定的任务执行。 void schedule(TimerTask task, long delay, long period)   在指定 的延迟之后开始 重新 执行 固定延迟执行的指定任务。 void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)   从指定的时间 开始 对指定的任务执行重复的 固定速率执行 。 void scheduleAtFixedRate(TimerTask task, long delay,long period) 在指定的延迟之后 开始 重新执行 固定速率的指定任务。 标准库中提供了一个 Timer 类. Timer 类的核心方法为 schedule 。schedule 包含两个参数. 第一个参数指定即将要执行的任务代码Mytask, 第二个参数指定多长时间之后执行 (单位为毫秒)。schedule方法参数列表 void schedule(TimerTask task, long delay)   作用在指定的延迟之后安排指定的任务执行。  实现一个简单的定时器使用 import java.util.Timer; import java.util.TimerTask;public class testDemo1 {public static void main(String[] args) {Timer timernew Timer();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);System.out.println(hell01);} }上方代码是让在定时器中执行4个任务分别等待时间4s3s2s1s打印内容。 运行结果如下 观察结果定时器通过对延迟时间的排序完成了打印再仔细看程序并没有停止什么时候程序不会停止呢就是前台线程没有执行完的时候程序不会停止也就是说定时器中的创建的线程是前台线程并且在完成任务后不会立即停止。 3.模拟实现一个定时器  定时器的主要构造内容 public class MyTimer{         //1.一个优先级阻塞队列         //2.一个内部类Mytask服务于schedule方法         //3.schedule方法         //4.一个构造方法         //5.一个锁 }  定时器中核心数据结构是优先级阻塞队列PriorityBlockingQueue它能够帮助我们判断谁先执行谁后执行。 schedule()方法 schedule()方法是定时器的核心方法它相当于一个时间表安排每一个任务的时间。 该方法有两个参数1.runnable任务 2.delay延迟时间 因为需要将两个参数同时加入到 优先级阻塞队列PriorityBlockingQueue当中因此我们需要将其进行封装一下代码如下 class MyTask implements ComparableMyTask{public Runnable runnable;public long time;public MyTask(Runnable runnable, long time) {this.runnable runnable;this.time System.currentTimeMillis()time;}Overridepublic int compareTo(MyTask o) {return (int)(this.time-o.time);} } 在使用延迟时间时我们现在使用绝对时间来记录这里使用到了时间戳并且实现Comparable接口他的目的是告诉阻塞队列根据时间判断优先执行哪一个任务。 进行来看schedule方法的实现 public void schedule(Runnable runnable,long delay) {MyTask tasknew MyTask(runnable,delay);queue.put(task);//来新任务了就叫醒线程synchronized (locker){locker.notify();}} 代码解读是构造一个任务并且设定它的延迟时间将任务加入到优先级阻塞队列下方的notify方法配合构造方法中的wait使用下方会有解读。 构造方法  代码实现如下  public MyTimer() {Thread tnew Thread(()-{while (true) {synchronized (locker) {try {MyTask cur queue.take();long curTime System.currentTimeMillis();if (curTime cur.time) {//没到时间queue.put(cur);locker.wait(cur.time - curTime);} else {//时间到了cur.runnable.run();}} catch (InterruptedException e) {e.printStackTrace();}}}});t.start();} 代码解读 我们先取出队列的队首元素在调用出现在的时间戳判断队首元素是否达到时间了因为优先级阻塞队列里面没有peek方法我们每次比较都必须将队首元素拿出来若没有达到指定时间我们需要再将队首元素再次塞进队伍当中塞回去之后若时间到了就执行这个任务的run方法。 在判断后时间没到时我们不能再一直进行判断时间因为这个cpu即没干任何事也没有得到休息cpu忙等这时我们就可以使用wait方法让cpu先将资源释放了等待唤醒就行了只要参数中的时间到了或者有需要比现在任务优先级更高的任务需要执行就让他先执行。 4.MyTimer完整代码 import java.util.concurrent.PriorityBlockingQueue; //没个任务都有一个需要做的事 class MyTask implements ComparableMyTask{public Runnable runnable;long time;public MyTask(Runnable runnable, long time) {this.runnable runnable;this.time System.currentTimeMillis()time;}Overridepublic int compareTo(MyTask o) {return (int)(this.time-o.time);} } public class MyTimer {//核心数据结构优先级阻塞队列private PriorityBlockingQueueMyTask queuenew PriorityBlockingQueue();private Object lockernew Object();public void schedule(Runnable runnable,long delay) {MyTask tasknew MyTask(runnable,delay);queue.put(task);//来新任务了就叫醒线程synchronized (locker){locker.notify();}}public MyTimer() {Thread tnew Thread(()-{while (true) {synchronized (locker) {try {MyTask cur queue.take();long curTime System.currentTimeMillis();if (curTime cur.time) {//没到时间queue.put(cur);locker.wait(cur.time - curTime);} else {//时间到了cur.runnable.run();}} catch (InterruptedException e) {e.printStackTrace();}}}});t.start();} }写在最后 以上就是本文全部内容如果对你有所帮助希望能留下你的点赞关注我会更加努力的更新内容非常感谢 若本篇文章有错误的地方欢迎大佬们指正
http://www.dnsts.com.cn/news/242323.html

相关文章:

  • 网站运行需求黄山自驾游最佳攻略
  • 班级网站建设思路17网一起做网店广州货源网
  • 电子商务网站的设计枣阳网站开发公司哪家好
  • 设计师网站库哈尔滨市土地局
  • 西宁手机网站微站建设开发平台指的是什么
  • 社交网站建设计划书高校网站建设滞后
  • 驻马店网站网站建设优秀网站主题
  • 唯美网站模板黄页88网怎么推广
  • 推广型网站开发网址巨量算数官方入口
  • 网站建设需求登记表 免费下载新手运营从哪开始学
  • 网站建设suteng网站建设服务合同印花税
  • 安徽省建设造价网站杭州哪家网站建设公司好
  • 做二维码的网站用jsp做的网站代码
  • ftp怎么做网站的备份最有创意促销活动方案
  • 南阳网站建设与管理婚纱网站建设目的
  • 公司网站建设小知识公司网站制作投标
  • 家装网站容桂网站制作咨询
  • 登陆注册是静态网站室内设计用什么软件比较好
  • 青岛海川建设集团有限公司网站wordpress成功的网站
  • 网店推广培训seo网站编辑是做什么的
  • 毕业设计网站建设体会网站建设平台策划
  • 北海住房和城乡建设部网站广州的互联网公司
  • 唐山网站开发公司建网站的详细技术
  • wordpress代码恢复旧编辑器南京搜必应网站优化
  • 微信官方网站下载安装个体工商户备案网站备案
  • 德语网站建设wordpress 一级目录下
  • 网站开发提供源代码手机建站平台淘客
  • 做企业网站需要多久新闻今天的最新新闻
  • 如何做好网站首页WordPress下如何用页面做侧边栏
  • 网站建设优惠网站信息发布