一个简单的定时器
编程技术  /  houtizong 发布于 3年前   86
package com.boz;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Date;import java.util.concurrent.*;import javax.swing.Timer;public class TimerTask {ExecutorService pool;private static TimerTask timeTask=null;public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stubTimerTask t=TimerTask.getTimerTask(10);for(int i=0;i<1000;i++){t.AddTask(500, new task(i));}Thread.currentThread().sleep(100000);}private TimerTask(int n) {// TODO Auto-generated constructor stub//初始化线程池this.pool=Executors.newFixedThreadPool(n);}//如果没有初始化TimerTask类,则使用n作为线程池参数初始化线程;public static TimerTask getTimerTask(int n){if(TimerTask.timeTask==null){TimerTask.timeTask=new TimerTask(n);}return TimerTask.timeTask;}public Timer AddTask(int ms,Runnable obj){//添加定时任务,该定时任务Timer t=new Timer(ms,new TimerTaskAction(obj));System.out.printf("%s %s%n", new Date().toString(),"start Timer");t.start();return t;}class TimerTaskAction implements ActionListener{//定时任务的事件监听器只是简单的将任务对象添加到线程池中private Runnable obj=null;public TimerTaskAction(Runnable Obj){this.obj=Obj;}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubpool.submit(this.obj);}}}class task implements Runnable{//该任务必须实现Runnable接口private int n=0;public task(int iN){this.n=iN;}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.printf("%s %d%n", new Date().toString(),this.n);}}
<div class="it610-blog-content-contain" style="font-size: 14px"></div>
鉴于java中定时器都会因为某个任务的执行缓慢而导致后面的任务不断延迟。所以编写了下面一个小程序做了一个延迟小的定时器。
说明:定时器使用javax.swing.Timer作为基础定时器,它在定时到达时会将任务添加到线程池FixedThreadPool中,任务由线程池运行。
疑问:javax.swing.Timer定时器从执行start到定时器触发有2到3秒的延迟。例如在第1秒执行start,定时为1000ms的情况下监听器会在第4第5秒执行;
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接