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

网站建设优化哪家好南通网站建设团队

网站建设优化哪家好,南通网站建设团队,南京手机网站设计公司,html网页完整代码作业简单作者主页#xff1a;paper jie_博客 本文作者#xff1a;大家好#xff0c;我是paper jie#xff0c;感谢你阅读本文#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏#xff0c;本专栏是针对于大学生#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造… 作者主页paper jie_博客 本文作者大家好我是paper jie感谢你阅读本文欢迎一建三连哦。 本文于《JavaEE》专栏本专栏是针对于大学生编程小白精心打造的。笔者用重金(时间和精力)打造将MySQL基础知识一网打尽希望可以帮到读者们哦。 其他专栏《MySQL》《C语言》《javaSE》《数据结构》等 内容分享本期将会分享多线程案例 - 定时器 目录 什么是定时器 Java标准库中的定时器 - Timer 自定义一个定时器 定时器的组成 描述类MyTask 实现MyTask的比较 MyTimer类的构架 schedule方法 内置线程 线程安全与wait等待 具体代码 代码执行流程 什么是定时器 定时器是我们程序猿来软件开发中一个很重要的组件.它的作用就是和闹钟一样. 当达到一个设定的时间后,就需要去执行某段指定的代码.定时器在我们实际开发中特别常见.比如一款游戏需要联网才能使用,要是在1秒之内没有数据返回给服务器,这时定时器就会发挥作用,断开与网络的连接然后尝试重连. Java标准库中的定时器 - Timer 在我们Java标准库中就内置了一个Timer类,他就是定时器. 它里面有一个核心方法schedule就是用来注册任务的.  schedule里面有两个参数. 一个是时间到了需要执行的代码, 第二个是需要等待的时间,单位是毫秒. public class ThreadDemo11 {public static void main(String[] args) {Timer timer new Timer();timer.schedule(new TimerTask() {Overridepublic void run() {System.out.println(hello 1000);}}, 1000);} } 自定义一个定时器 定时器的组成 这里用一个MyTimer类来表示定时器 1) 需要一个存放任务的优先级队列PriorityQueue 2) 需要一个MyTask类来描述任务 3) 这些任务是需要比较时间的,MyTask类需要实现Comparable接口 4) 需要定义一个内置线程来不断扫描任务观察时间到了没 5) 需要实现核心方法schedule来注册任务 描述类MyTask Task这个类用来描述任务,里面包含一个Runnable对象和一个time时间戳. 需要执行的代码会通过传参的形式给到Runnable. class MyTask3 {//private long time;private Runnable runnable null;public MyTask3(Runnable runnable, long delay) {this.runnable runnable;//需要执行的时刻this.time System.currentTimeMillis() delay;}//获取时间public long getTime() {return time;}//获取需要执行的代码public void run() {runnable.run();}} 实现MyTask的比较 因为Mytask是描述任务,而这些任务需要放到优先级队列中比较,就需要实现Comparable或者比较器.这里我们实现Comparable接口. class MyTask3 implements ComparableMyTask3{//private long time;private Runnable runnable null;public MyTask3(Runnable runnable, long delay) {this.runnable runnable;//需要执行的时刻this.time System.currentTimeMillis() delay;}//获取时间public long getTime() {return time;}//获取需要执行的代码public void run() {runnable.run();}//比较时间快慢方法Overridepublic int compareTo(MyTask3 o) {return (int)(this.time - o.time);} } MyTimer类的构架 这里最核心的就是priorityQueue这个优先级队列,用它来存放我们的任务. 所对象为我们后面起到一个加锁的作用. class MyTimer3 {//用优先级队列来存放任务private PriorityQueueMyTask3 priorityQueue new PriorityQueue();//锁对象private Object blocker new Object();public void schedule(Runnable runnable, long time) {//核心方法} } schedule方法 这里我们在核心方法schedule中创建出一个任务,再将这个任务放入优先级队列中. public void schedule(Runnable runnable, long time) {//创建一个任务MyTask3 myTask3 new MyTask3(runnable, time);//将创建的任务放入优先级队列中priorityQueue.offer(myTask3);} 内置线程 这里将内置线程放入构造方法中,当这个类一创建就开始执行. 这里通过while循环来不断扫描. //内置线程public MyTimer3() {//创建一个线程Thread t new Thread(() - {//通过while来不断扫描while(true) {//判断优先级队列是不是空的if(priorityQueue.isEmpty()) {//为空就等待//continue;}//当优先级队列中有任务时,取出任务MyTask3 myTask3 priorityQueue.peek();//当前时间long time System.currentTimeMillis();//如果到时间了就执行if(time myTask3.getTime()) {myTask3.run();priorityQueue.take();}else {//时间没到等待//continue;}}});t.start();} 线程安全与wait等待 这里发现schedule方法和构造方法都会有对于priorityQueue优先级队列的读和修改,这里可能就会出现线程安全问题,我们就需要为他们加上锁. 为空时我们就通过wait方法等待,等调用schedule方法使用notify唤醒它. 当有元素时但时间没到也是使用wait有时间的等待,时间到了就解除等待. public void schedule(Runnable runnable, long time) {synchronized (blocker) {//创建一个任务MyTask3 myTask3 new MyTask3(runnable, time);//将创建的任务放入优先级队列中priorityQueue.offer(myTask3);//通过notify来唤醒扫描线程blocker.notify();}}//内置线程public MyTimer3() {//创建一个线程Thread t new Thread(() - {//通过while来不断扫描while(true) {//加锁synchronized (blocker) {try {//判断优先级队列是不是空的if(priorityQueue.isEmpty()) {//为空就等待blocker.wait();}//当优先级队列中有任务时,取出任务MyTask3 myTask3 priorityQueue.peek();//当前时间long time System.currentTimeMillis();//如果到时间了就执行if(time myTask3.getTime()) {myTask3.run();priorityQueue.poll();}else {//时间没到等待 通过wait等待 有时间的等待.blocker.wait(myTask3.getTime() - time);}}catch(InterruptedException o) {o.printStackTrace();}}}});//启动线程t.start();} 具体代码 class MyTask3 implements ComparableMyTask3{//private long time;private Runnable runnable null;public MyTask3(Runnable runnable, long delay) {this.runnable runnable;//需要执行的时刻this.time System.currentTimeMillis() delay;}//获取时间public long getTime() {return time;}//获取需要执行的代码public void run() {runnable.run();}//比较时间快慢方法Overridepublic int compareTo(MyTask3 o) {return (int)(this.time - o.time);} }class MyTimer3 {//用优先级队列来存放任务private PriorityQueueMyTask3 priorityQueue new PriorityQueue();//所对象private Object blocker new Object();//核心方法public void schedule(Runnable runnable, long time) {synchronized (blocker) {//创建一个任务MyTask3 myTask3 new MyTask3(runnable, time);//将创建的任务放入优先级队列中priorityQueue.offer(myTask3);//通过notify来唤醒扫描线程blocker.notify();}}//内置线程public MyTimer3() {//创建一个线程Thread t new Thread(() - {//通过while来不断扫描while(true) {//加锁synchronized (blocker) {try {//判断优先级队列是不是空的if(priorityQueue.isEmpty()) {//为空就等待blocker.wait();}//当优先级队列中有任务时,取出任务MyTask3 myTask3 priorityQueue.peek();//当前时间long time System.currentTimeMillis();//如果到时间了就执行if(time myTask3.getTime()) {myTask3.run();priorityQueue.poll();}else {//时间没到等待 通过wait等待 有时间的等待.blocker.wait(myTask3.getTime() - time);}}catch(InterruptedException o) {o.printStackTrace();}}}});//启动线程t.start();} } 代码执行流程
http://www.sczhlp.com/news/208675/

相关文章:

  • 三亚网站定制开发公司介绍自己的网页设计作品
  • 沧州网站建设的公司免费高清无专码区
  • 校园网站设计代码网站设计建设公司怎么做
  • 云建站哪家好西安网站seo费用
  • 中通建设计院第四分公司网站阳光家园广州网站
  • 家具网站模板下载怎么用ftp备份网站
  • 电商公司网站如何用工控做网站
  • 做网站先做母版页wordpress 文章管理
  • tryhackme-预安全-网络安全简介-网络职业-03
  • 做网站应该注意哪些问题20条优化防疫措施方案
  • 谁做视频网站wechat网页版登陆
  • 法治建设网站模块宁波网站建设培训哪家好
  • 好用的网站链接网站制作公司全域营销获客公司
  • 网站怎么修改模板内容重庆做模块网站
  • 怎样做淘宝网站如何在vs做网站
  • 河南省住房和城乡建设部网站首页兼职网站做任务
  • 网站开发一般用什么软件有哪些网页制作框架教程
  • asp.net网站后台源码5个常见的电子商务网站
  • 电影网站建设教程如何跟客户销售做网站
  • 网站关键词优化怎么弄wordpress单页下载
  • 目前个人网站做地最好是哪几家大连专业手机自适应网站制作
  • 网站续费能自己续费吗网站建设高考题
  • 网站模板紫色一般什么企业需要建站
  • 企业网站开发中文摘要深圳网站建设哪些
  • 网站描述怎么设置城阳网站开发
  • 山东网站营销seo哪家好网站开发应用
  • 公司网站建设怎么选择做网站起名字
  • 制作网站的钱做一个英文网站多少钱
  • 四川佳和建设工程网站腾讯邮箱企业邮箱入口登录
  • 地方电商网站武清区网站建设