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

网站后台是怎么更新网站开发多久能学会

网站后台是怎么更新,网站开发多久能学会,南宁市优化网站公司,做外贸哪个网站比较好目录 一、定时器简介1.1 Timer类1.2 使用案例 二、实现简易定时器2.1 MyTimerTask类2.2 实现schedule方法2.3 构造方法2.4 总代码2.5 测试 一、定时器简介 定时器#xff1a;就相当于一个闹钟#xff0c;当我们定的时间到了#xff0c;那么就执行一些逻辑。 1.1 Timer类 … 目录 一、定时器简介1.1 Timer类1.2 使用案例 二、实现简易定时器2.1 MyTimerTask类2.2 实现schedule方法2.3 构造方法2.4 总代码2.5 测试 一、定时器简介 定时器就相当于一个闹钟当我们定的时间到了那么就执行一些逻辑。 1.1 Timer类 Java的标准库中提供了在java.util包下的Timer类作为定时器。 有如下的构造方法 四种 timer() 无参构造timer(boolean isDaemon) 创建的线程都是后台线程timer(String name) 给定时器中创建的线程名字timer(String name, boolean isDaemon) 创建的线程都是后台线程也给定时器中创建的线程名字。 在Timer类中的核心方法是schedule方法。 schedule(Timer task, Date time) 到达time时刻后执行task任务schedule(Timer task, Date firstTime, long period) 到达time时刻后重复执行task任务每次相隔period时间schedule(Timer task, long delay) 在delay时间后执行task任务schedule(Timer task, long delay, long period) 在delay时间后重复执行task任务每次相隔period时间scheduleAtFixedRate(Timer task, Date firstTime, long period) 到达time时刻后重复执行task任务每次执行period时间scheduleAtFixedRate(Timer task, long delay, long period) 在delay时间后重复执行task任务每次执行period时间 schedule的第一个参数是TimerTask类这是一个实现了Runnable接口的抽象类。 1.2 使用案例 我们使用schedule方法来打印不同时间执行不同内容。 import java.util.Timer; import java.util.TimerTask;public class Demo {public static void main(String[] args) {Timer timer new Timer();timer.schedule(new TimerTask() {Overridepublic void run() {System.out.println(3000ms后执行);}},3000);timer.schedule(new TimerTask() {Overridepublic void run() {System.out.println(1000ms后执行);}},1000);timer.schedule(new TimerTask() {Overridepublic void run() {System.out.println(2000ms后执行);}},2000);} }结果如下会按照等待时间由小到大打印内容并且执行完之后并不会结束这是因为这些线程是前台线程。 二、实现简易定时器 自己实现的定时器主要要考虑下面几个内容 设计一个类表示任务对应TimerTask类使用优先级队列来组织多个任务每次根节点都是等待时间最短的任务实现schedule方法把任务添加到队列中额外创建一个线程负责执行队列中的任务根据时间来执行即判断是否到了该执行的时间了。 2.1 MyTimerTask类 这个类中需要 将要执行的任务和任务要执行的时刻记录下来并且这个任务还要有通过时刻比较得方法即实现Comparator接口重写CompareTo方法便于后面存储进优先级队列。 代码 class MyTimerTask implements ComparableMyTimerTask{//记录任务private Runnable task null;//记录执行任务的时刻private long current 0;public MyTimerTask(Runnable task, long current) {this.task task;this.current current;}public Runnable getTask() {return task;}public long getCurrent() {return current;}Overridepublic int compareTo(MyTimerTask o) {return (int)(this.current - o.current);} }2.2 实现schedule方法 我们实现schedule方法 只需要将当前的任务传入队列中即可。将参数Runnable的任务和时刻用来创建MyTimerTask类在入队即可。我们还要使用notify为后面的线程中因为队列为空调用wait进入阻塞状态提供唤醒。 代码 private PriorityQueueMyTimerTask queue new PriorityQueue();public void schedule(Runnable task, long delay) {synchronized (this) {MyTimerTask myTimerTask new MyTimerTask(task, System.currentTimeMillis() delay);queue.offer(myTimerTask);this.notify();}}2.3 构造方法 在构造方法中额外创建一个线程负责执行队列中的任务根据时间来执行即判断是否到了该执行的时间了。 我们在最外层使用一层死循环来不断去读取队列中的任务。如果队列空了那么我们就出这次循环但是如果使用continue的话还是会在循环的去判断直到队列不为空为止。这样的消耗很高我们可以使用wait等待schedule方法入队列后来唤醒这个线程。如果没有到达执行时间我们也要出这次循环但是使用continue也会导致在从现在这个时刻到执行时刻之间一直进行无意义的执行上面的代码消耗很高我们这里直接使用带参数的wait方法等待还需要的时间即可。到达执行时间直接执行任务并出队列即可。最后不要忘记启动这个线程。 代码 public MyTimer() {Thread thread new Thread(()- {try {while(true) { //循环拿任务直到任务队列为空synchronized (this) {while (queue.isEmpty()) { //任务队列为空this.wait();}MyTimerTask task queue.peek();if(task.getCurrent() System.currentTimeMillis()) { //没到执行时间 this.wait(task.getCurrent() - System.currentTimeMillis());} else {task.run();queue.poll();}}}} catch (InterruptedException e) {e.printStackTrace();}});thread.start();}2.4 总代码 总代码如下 class MyTimerTask implements ComparableMyTimerTask{//记录任务private Runnable task null;//记录执行任务的时刻private long current 0;public MyTimerTask(Runnable task, long current) {this.task task;this.current current;}public Runnable getTask() {return task;}public long getCurrent() {return current;}Overridepublic int compareTo(MyTimerTask o) {return (int)(this.current - o.current);}public void run() {task.run();}}class MyTimer {private PriorityQueueMyTimerTask queue new PriorityQueue();public void schedule(Runnable task, long delay) {synchronized (this) {MyTimerTask myTimerTask new MyTimerTask(task, System.currentTimeMillis() delay);queue.offer(myTimerTask);this.notify();}}public MyTimer() {Thread thread new Thread(()- {try {while(true) { //循环拿任务直到任务队列为空synchronized (this) {while (queue.isEmpty()) { //任务队列为空this.wait();}MyTimerTask task queue.peek();if(task.getCurrent() System.currentTimeMillis()) { //没到执行时间this.wait(task.getCurrent() - System.currentTimeMillis());} else {task.run();queue.poll();}}}} catch (InterruptedException e) {e.printStackTrace();}});thread.start();} }2.5 测试 如果在main中执行下面这样的代码也使用schedule方法来打印不同时间执行不同内容会与上面使用案例的结果一样。 public static void main(String[] args) {MyTimer timer new MyTimer();timer.schedule(new Runnable() {Overridepublic void run() {System.out.println(3000ms后执行);}},3000);timer.schedule(new Runnable() {Overridepublic void run() {System.out.println(1000ms后执行);}},1000);timer.schedule(new Runnable() {Overridepublic void run() {System.out.println(2000ms后执行);}},2000);}结果如下会按照等待时间由小到大打印内容并且执行完之后并不会结束这是因为这些线程是前台线程。
http://www.w-s-a.com/news/972507/

相关文章:

  • 南京建设银行公积金查询网站wordpress加载插件下载
  • 做网站怎么那么难网站的建设与管理的心得体会
  • 黄冈网站建设哪家快些网站规划与建设评分标准
  • 建站平台 绑定域名怎么在手机上做网站
  • 做电影网站违法吗莱芜 网站
  • 品牌咨询公司泉州seo不到首页不扣费
  • 做网站做一个什么主题的怎样搭建一个企业网站
  • 做设计的有什么网站桂林论坛网站有哪些
  • 做的网站不能放视频开发公司春联
  • 重庆装修房子可以提取公积金吗长沙优化官网公司
  • 做外贸的网站都有哪些带后台的html网站源码
  • 厦门百度快速优化排名手机系统优化工具
  • 宁波网站制作公司推荐公司建站多少钱
  • 网络营销薪酬公司温州网站优化定制
  • 橙色在网站中的应用淘宝客绑定网站备案号
  • 杭州视频网站建设成都设计院排行
  • 慈溪建设网站盘丝洞app破解无限盘币
  • 关于服装店网站建设的策划方案seo关键词优化软件官网
  • 丰台高端网站建设土巴兔装修贵吗
  • 宽屏网站mysqli pdo wordpress
  • 2022年没封网站直接进入赣州网吧
  • 河南省建设厅证件证件查询网站硬件开发是什么意思
  • tp5做企业网站宿迁房产网租房信息
  • php高级网站开发wordpress不能添加文章
  • 小学校园网站建设付费阅读下载网站开发
  • 如何做招聘网站网站建设中 敬请期待
  • 雅安工程交易建设网站做vip电影网站
  • 网站建设方维网站标题title为什么不能频繁的改
  • 网站建设如何上传文件wordpress列表自定义数据表
  • 摄影课程自学网站科技项目的类型有