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

网站建设低价wordpress dx

网站建设低价,wordpress dx,重庆网站设计系统,wordpress腾讯后台账号目录 一、定时器是什么? 二、Java标准库中的定时器 三、自己实现定时器 四、标准库中更推荐使用的定时器 一、定时器是什么? 定时器是一种用于在指定时间间隔或特定时间点执行特定任务的工具或设备。在计算机科学中#xff0c;定时器通常是软件或硬件组件#xff0c;用…目录 一、定时器是什么? 二、Java标准库中的定时器 三、自己实现定时器 四、标准库中更推荐使用的定时器 一、定时器是什么? 定时器是一种用于在指定时间间隔或特定时间点执行特定任务的工具或设备。在计算机科学中定时器通常是软件或硬件组件用于跟踪时间的流逝并在预定的时间触发事件或执行操作。 定时器是软件开发中的一个重要组件。类似于一个闹钟。达到一个设定的时间之后就执行某个指定好的代码。 定时器的使用场景 定时提醒日历应用程序或提醒应用程序可以使用定时器来触发提醒事件例如在预定的时间点提醒用户参加会议或生日。 定时任务定时关闭电视或空调等家用电器以减少不必要的能源消耗。 游戏开发在游戏开发中定时器可以用于实现游戏中的动画效果、计时器功能或限时任务等。 二、Java标准库中的定时器 Java标准库中提供了一个 Timer 类Timer 类的核心方法为 schedule。 schedule 方法包含两个参数。 第一个参数指定即将要执行的任务代码这个参数的类型 TimerTask 是一个抽象类它实现了 Runnable 接口就把它当作 Runnable 来使用即可。第二个参数指定多长时间之后执行任务(单位为毫秒)。 Timer 类内部包含一个线程只有这个线程来执行所有的定时任务。这意味着如果有多个任务被安排在同一时间执行它们将按顺序逐个执行而不能并行执行。 import java.util.Timer; import java.util.TimerTask;public class Demo1 {public static void main(String[] args) {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);} } 这段代码创建了一个 Timer 对象并安排了三个定时任务分别在延迟 3000 毫秒、2000 毫秒和 1000 毫秒后执行。 由于 Timer 内部包含了前台线程因此进程没有结束。 三、自己实现定时器 需求 能够延时执行任务/指定时间执行任务。能够管理多个任务。 对于要延时执行的任务要将其转换成绝对时间(当前的时间戳)这样方便判定后续任务是否要执行因为如果还是记录延时需要随着时间的推移不断更新delay非常麻烦。 我们将任务及任务执行的绝对时间封装成一个类Task更具体地表示这个任务。用一个优先级队列保存这些任务以任务执行的绝对时间靠前为优先级。(不使用 PriorityBlockingQueue在这个实现中容易死锁)定时器中需要有线程一直扫描队首元素看队首是否需要执行。 详细过程见代码 import java.util.PriorityQueue;//用于描述一个任务的类 class MyTimerTask implements ComparableMyTimerTask {//要执行的任务private Runnable runnable;//当前任务实际执行的时间戳private long time;public MyTimerTask(Runnable runnable, long delay) {this.runnable runnable;//取当前时刻的时间戳delay(延迟时间)作为当前任务实际执行的时间戳this.time System.currentTimeMillis() delay;}public void run() {this.runnable.run();}public long getTime() {return this.time;}Overridepublic int compareTo(MyTimerTask o) {//试试哪个是升序就可以return (int) (this.time - o.time);//return (int) (o.time - this.time);} }//定时器 class MyTimer {//用优先级队列存放所有任务以时间戳升序排序private PriorityQueueMyTimerTask queue new PriorityQueue();//定时器中存在一个工作线程不停扫描队首元素看是否能执行这个任务public MyTimer() {Thread t new Thread(() - {while (true) {try {synchronized (this) {//任务队列为空主动阻塞等待if (queue.isEmpty()) {this.wait();}//看队首元素是否到达要执行的时间MyTimerTask task queue.peek();long curTime System.currentTimeMillis();//已经到达(当前时间的时间戳更大)任务执行并出队if (curTime task.getTime()) {task.run();queue.poll();} else {//队首还没到达执行时间则任务队列所有任务都还没到达执行时间//避免重复循环判断主动阻塞等待(等待的最长时间就是当前的时间间隔)this.wait(task.getTime() - curTime);}}} catch (InterruptedException e) {throw new RuntimeException();}}});t.start();}//安排指定的任务在指定的时间之后执行public void schedule(Runnable runnable, long delay) {synchronized (this) {MyTimerTask task new MyTimerTask(runnable, delay);queue.offer(task); //加入到任务队列//有新任务就唤醒上次阻塞等待的任务//当前新任务的实际执行时间可能更早此时再判断队首任务是否执行并更新wait的时间this.notify();}} }//实现定时器 public class Demo2 {public static void main(String[] args) {MyTimer myTimer new MyTimer();myTimer.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 3000);}}, 3000);myTimer.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 2000);}}, 2000);myTimer.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 1000);}}, 1000);} }执行结果于使用标准库的一致。这里不使用PriorityBlockingQueue的原因是它只能处理队列为空时候的阻塞而任务还都未到执行时间时的阻塞就需要通过额外的锁对象和 wait 来实现。 此时代码就更复杂了引入了两把锁(额外引入的锁对象和阻塞队列自带的锁)这就容易死锁了而我们自己控制wait只需要一把锁更容易控制代码。 四、标准库中更推荐使用的定时器 由于 Timer 是单线程的因此不推荐在任务中执行耗时操作或阻塞操作因为这会影响到其他任务的执行。另外如果在任务中抛出未捕获的异常会导致该线程终止从而影响到其他任务的执行。 Java标准库中还有一种主要的定时器实现就是使用案例(3)中标准库的线程池 Executors 工厂类里的第四个工厂方法Executors.newScheduledThreadPool(int corePoolSize)。 这个方法返回ScheduledExecutorServiceScheduledExecutorService 是一种特殊类型的线程池它具有定时执行任务的功能。它继承自 ExecutorService 接口同时扩展了定时执行任务的能力。相比于 Timer 类ScheduledExecutorService 支持更多的灵活性和功能并且可以更好地处理多个并发任务。 ScheduledExecutorService 接口的核心方法也是 schedule与 Timer 不同的是其参数。 参数 command 是一个 Runnable 对象表示要执行的任务参数 delay 是延迟时间以指定的时间单位TimeUnit表示参数 unit 则是时间单位可以是纳秒、毫秒、秒等。 import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;public class Demo3 {public static void main(String[] args) {//使用 Executors.newScheduledThreadPoolScheduledExecutorService threadPool Executors.newScheduledThreadPool(1);threadPool.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 3000);}}, 3000, TimeUnit.MILLISECONDS);threadPool.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 2000);}}, 2000, TimeUnit.MILLISECONDS);threadPool.schedule(new Runnable() {Overridepublic void run() {System.out.println(hello 1000);}}, 1000, TimeUnit.MILLISECONDS);threadPool.shutdown();} }
http://www.pierceye.com/news/409948/

相关文章:

  • 做网站一定要服务器吗做响应式网站
  • 做网站建设涉及哪些算法呼和浩特网站建设电话
  • 网站流量统计 设计做seo需要会网站开发吗
  • 网站前台用什么开发襄阳谷城网站建设
  • 网站icp备案号怎么查北京 网站建设 SEO
  • 西安做网站哪里好wordpress用户前端化
  • 宁波网站优化如何免费加速器
  • 一佰互联自助建站网站公司建设网站价格
  • 外贸网站模板免费下载wordpress英文显示改中文字体
  • 长春电商网站建设公司电话微博内容放到wordpress
  • 网站销售怎么样的商务网站模块设计时前台基础设施建设
  • 进空间的网站吗帝国建站教程
  • 做网站 业务流程图如何选择丹阳网站建设
  • 金属东莞网站建设技术支持开放平台产品经理
  • 全网营销型的网站苏州网站设计多少钱
  • 河南教育平台网站建设北京市工程建设信息交易网站
  • 正规品牌网站设计推荐如何上传自己的做的网站
  • 企业网站优化甲薇g71679做同等效果下拉词制作手机网站哪家好
  • 物流运输做网站的素材多用户商城系统价格
  • 营销型网站建设流程电脑怎么建网站
  • 郑州市汉狮做网站360免费建站
  • 安阳哪里有学做网站的学校做个公众号需要多少钱
  • 建站seo是什么成都做营销型网站
  • 网站建设哪个wordpress分类title
  • 建手机网站多少钱挂机软件定制
  • 网站建设 提案 框架河南一般建一个网站需要多少钱
  • 福建省建设人才市场网站深圳营销型网站建设优化
  • 晋城购物网站开发设计宣传网站有哪些
  • 在哪人网站要以接it项目做企业为什么要分析环境
  • 达令的网站建设wordpress上传视频