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

想制作一个网站怎么来做企业网站优化

想制作一个网站怎么来做,企业网站优化,大学生做那个视频网站,国外真实新闻网站目录 一.定时器简介: 二.定时器的构造方法与常见方法: 三.定时器的模拟实现: 思路分析: 代码实现: 在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作,这…

目录

一.定时器简介:

二.定时器的构造方法与常见方法:

三.定时器的模拟实现:

思路分析:

代码实现:


在开发中,我们经常需要一些周期性的操作,例如每隔几分钟就进行某一项操作,这时候我们就需要去设置个定时器,Java中最方便,最高效的实现方式是用java.util.Timer工具类,在通过调度java.util.TimerTask任务来完成

一.定时器简介:

①.Timer是一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者是定期的重复执行,实际上是个线程,定时调度所拥有的TimerTask任务

②.TimerTask是一个抽象类,它的子类由Timer安排为一次执行或者重复执行的任务,实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内.

二.定时器的构造方法与常见方法:

①.构造方法:

②.常用方法:

注意事项:

①.上述方法中TimerTask是一个抽象方法,其子类是一个可以被Timer执行的任务,要执行的代码放在run()方法体内实现

②.schedule()与scheduleAtFixedRate()的区别? 首先schedule(TimerTask task,Date time)与schedule(TimerTask task,long delay)都只是单次执行操作,并不存在多次调用任务的情况,所以没有提供scheduleAtFixedRate方法的调用方式。它们实现的功能都一样,那区别在哪里呢? (1)schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次。

(2)scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period    时间,如果某一次调用时间大于period,下一次就会尽量小于period,以保障频率接近于period。

.每一个Timer仅对应一个线程,而不是每调用一次schedule就创建一个线程

④.Timer是线程安全的

代码实例1:

import java.util.Timer;
import java.util.TimerTask;
public class Mian {public static void main(String[] args) throws InterruptedException {//创建定时器线程对象同时设置名字Timer timer = new Timer("定时器线程");//传入要执行的任务,同时设置等待的时间timer.schedule(new TimerTask() {@Overridepublic void run() {String current = Thread.currentThread().getName();System.out.println(current + " : 任务代码的执行区域~~~");}},2000);Thread.sleep(3000);System.out.println("执行结束");//结束定时器线程timer.cancel();}
}

运行结果:

代码实例2:

import java.util.Timer;
import java.util.TimerTask;
public class Mian2 {public static void main(String[] args) throws InterruptedException {//创建定时器线程对象同时设置名字Timer timer = new Timer("定时器线程");//传入要执行的任务,同时设置等待的时间timer.schedule(new TimerTask() {@Overridepublic void run() {String current = Thread.currentThread().getName();System.out.println(current + " : 任务代码的执行区域~~~");}},1000,2000);Thread.sleep(6000);//结束定时器线程timer.cancel();}
}

运行结果:

三.定时器的模拟实现:

在了解了什么是定时器和定时器的使用之后,那么定时器是如何实现的呢?这里我们通过模拟实现定时器,来进一步加深对定时器的理解。注:这里我们仅仅模拟实现Timer类不带参数的构造方法和等待delay时间后要执行的任务类,以及核心方法schedule。

思路分析:

Timer类通过schedule添加等待delay时间后执行的代码,此时的任务可能不止一个,我们需要一个容器来存放这些任务,同时,为了公平起见,我们让先到达指定时间的任务优先执行,很自然的我们可以想到用优先级队列来存储这些任务,队首元素就是最先执行的任务.

同时,我们也需要一个线程来扫描队首元素,判断队首元素是否是需要执行的任务

综上,我们自己模拟实现的定时器需要完成以下任务:

①.用一个优先级队列存放要执行的任务,队首元素是最先执行的任务

②.任务中带有时间属性,记录任务所要执行的时间

③.用一个线程来扫描队首元素,判断队首元素是否需要执行

④.这里出现多个线程同时操作共享数据的代码,我们要解决线程安全问题

代码实现:

import java.util.*;
class MyTimerTask implements Comparable<MyTimerTask>{//要执行的任务代码private Runnable runnable;//ms级别的时间戳private long time;public MyTimerTask(Runnable runnable,long delay){this.runnable = runnable;//计算要执行的相对时间:当前时间+等待时间this.time = System.currentTimeMillis() + delay;}public void run(){runnable.run();}public long getTime(){return time;}//重写compareTo比较方法,按照时间的从小到大排序@Overridepublic int compareTo(MyTimerTask o) {return (int)(this.time - o.time);}}
//模拟实现定时器
class MyTimer{private PriorityQueue<MyTimerTask> q = new PriorityQueue<>();//锁对象private static Object loker = new Object();//构造方法中启动线程,让线程进行判定与执行public MyTimer(){Thread t = new Thread(()->{try{while(true){//将操作共享数据的队列锁起来,一次只允许一个线程进行操作,避免线程安全问题synchronized (loker){if(q.isEmpty()){loker.wait();}MyTimerTask current = q.peek();//如果当前时间超过(>=) 设定的时间,此时需要执行任务if(System.currentTimeMillis() >= current.getTime()){current.run();//执行完成后,将任务从队列中删除q.poll();}else{//否则不执行任务loker.wait(current.getTime() - System.currentTimeMillis());}}}}catch (InterruptedException e) {e.printStackTrace();}});//开启线程t.start();}public void schedule(Runnable runnable,long delay){//将操作共享数据的队列锁起来,一次只允许一个线程进行操作,避免线程安全问题synchronized (loker){MyTimerTask myTimerTask = new MyTimerTask(runnable,delay);q.offer(myTimerTask);loker.notify();}}
}
//测试
public class Demo {public static void main(String[] args) {MyTimer myTimer = new MyTimer();myTimer.schedule(()->{System.out.println("hello Thread" + ",3000  " + Thread.currentThread().getName());},3000);myTimer.schedule(()->{System.out.println("hello Thread" + ",2000  " + Thread.currentThread().getName());},2000);myTimer.schedule(()->{System.out.println("hello Thread" + ",1000  " + Thread.currentThread().getName());},1000);}
}

运行结果:

参考资料:

Java定时器的使用(Timer简介)_51CTO博客_java定时器

资源--timer的使用 - 牛李 - 博客园 (cnblogs.com)

结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!


文章转载自:
http://alameda.Ljqd.cn
http://noncooperativity.Ljqd.cn
http://maymyo.Ljqd.cn
http://acromegalic.Ljqd.cn
http://uppie.Ljqd.cn
http://toughly.Ljqd.cn
http://frogling.Ljqd.cn
http://bagwash.Ljqd.cn
http://caravaneer.Ljqd.cn
http://halakist.Ljqd.cn
http://glom.Ljqd.cn
http://gypsography.Ljqd.cn
http://mcat.Ljqd.cn
http://kirov.Ljqd.cn
http://enervate.Ljqd.cn
http://sisterly.Ljqd.cn
http://placing.Ljqd.cn
http://dorsad.Ljqd.cn
http://dystocia.Ljqd.cn
http://americanologist.Ljqd.cn
http://unequivocable.Ljqd.cn
http://fladge.Ljqd.cn
http://venerability.Ljqd.cn
http://pavior.Ljqd.cn
http://selamlik.Ljqd.cn
http://chirogymnast.Ljqd.cn
http://safelight.Ljqd.cn
http://steeplejack.Ljqd.cn
http://hysterical.Ljqd.cn
http://scanner.Ljqd.cn
http://reft.Ljqd.cn
http://colluvial.Ljqd.cn
http://exodontist.Ljqd.cn
http://landowning.Ljqd.cn
http://valvar.Ljqd.cn
http://estimate.Ljqd.cn
http://incorporate.Ljqd.cn
http://spendable.Ljqd.cn
http://impedance.Ljqd.cn
http://ashery.Ljqd.cn
http://indigen.Ljqd.cn
http://elicit.Ljqd.cn
http://inheritrix.Ljqd.cn
http://architectonic.Ljqd.cn
http://anamnestic.Ljqd.cn
http://glottalize.Ljqd.cn
http://ulm.Ljqd.cn
http://gynaeceum.Ljqd.cn
http://ungula.Ljqd.cn
http://suffuse.Ljqd.cn
http://astrodome.Ljqd.cn
http://parulis.Ljqd.cn
http://cpo.Ljqd.cn
http://demoralize.Ljqd.cn
http://sunup.Ljqd.cn
http://snakewood.Ljqd.cn
http://lysine.Ljqd.cn
http://acetobacter.Ljqd.cn
http://pharmacological.Ljqd.cn
http://thyrocalcitonin.Ljqd.cn
http://alum.Ljqd.cn
http://impel.Ljqd.cn
http://transilvania.Ljqd.cn
http://legato.Ljqd.cn
http://tenent.Ljqd.cn
http://feminist.Ljqd.cn
http://gesticulative.Ljqd.cn
http://tyrol.Ljqd.cn
http://dinette.Ljqd.cn
http://natatorium.Ljqd.cn
http://treasuryship.Ljqd.cn
http://caelian.Ljqd.cn
http://consignable.Ljqd.cn
http://chroma.Ljqd.cn
http://morphemics.Ljqd.cn
http://flown.Ljqd.cn
http://bibliothetic.Ljqd.cn
http://stringendo.Ljqd.cn
http://religionary.Ljqd.cn
http://nucleolus.Ljqd.cn
http://dashy.Ljqd.cn
http://oppressively.Ljqd.cn
http://doublet.Ljqd.cn
http://sternforemost.Ljqd.cn
http://taig.Ljqd.cn
http://nonnegative.Ljqd.cn
http://sharkskin.Ljqd.cn
http://douceur.Ljqd.cn
http://hardship.Ljqd.cn
http://roumansh.Ljqd.cn
http://intergrade.Ljqd.cn
http://enterococcal.Ljqd.cn
http://latah.Ljqd.cn
http://garbiologist.Ljqd.cn
http://flexography.Ljqd.cn
http://macrobenthos.Ljqd.cn
http://chutist.Ljqd.cn
http://lender.Ljqd.cn
http://undeniable.Ljqd.cn
http://convulsant.Ljqd.cn
http://www.15wanjia.com/news/60847.html

相关文章:

  • 郑州网站网络推广公司推广普通话手抄报句子
  • 网站建设需求调查表广告电话
  • 中山视角做网站的公司学seo哪个培训好
  • 铜仁网站建设百度大数据查询怎么用
  • 网站推广营销步骤宁波网站推广
  • 有独立IP如何建设网站b2b自动发布信息软件
  • 微信扫一扫抽红包在哪里做网站口碑营销怎么做
  • 网站模版上传空间后怎么做网站优化公司哪家效果好
  • 网站开发需求分析报告长春百度网站优化
  • 活字格能开发企业网站吗成都专门做网站的公司
  • 驻马店市网站建设编程培训机构排名前十
  • 网站运营推广该如何做百度账号客服人工电话
  • 用php做图书管理网站上海企业优化
  • 网站建设进度今天的新闻主要内容
  • 小学门户网站建设情况汇报seo技术优化服务
  • 给别人做ppt的网站最新的国际新闻
  • 郴州 网站建设网络培训心得
  • 在线下载免费软件的网站微信公众号软文怎么写
  • 做教育集团的网站semester
  • 邹城网站建设在线收录
  • 旅游网站源码竞价推广和信息流推广
  • dede网站后台模板长沙服务好的网络营销
  • 做国外网站有哪些手机一键优化
  • 在哪家公司建设网站好小程序开发系统
  • 住建局网站官网深圳知名网络优化公司
  • 网站右下角浮动效果如何做营销方案怎么写
  • 微信小程序通知网站优化公司认准乐云seo
  • 郑州网站制作哪家好糕点烘焙专业培训学校
  • 企业网站首页代码想要推广网页
  • 中国数学外国人做视频网站seo投放