zoukankan      html  css  js  c++  java
  • 自己定义定时器(Timer)

       近期做项目的时候,用到了java.util.Timer定时器类,也初步使用了。个人感觉不错。

    只是,在某些方面Timer类无法满足项目的需求。比方。在使用Timer时。调用schedule()方法之后(初始化),其循环周期无法改变,仅仅有调用cancel()方法之后再又一次启动才干将循环周期改变。 自己自己定义了一个定时器线程,可开启、可关闭、可动态的改变循环周期,详细代码例如以下:

    /** 
    * @ClassName: MyTimer 
    * @Description: TODO 自己定义定时器类
    * @author  yc
    * @date 2014年10月16日 下午10:42:04 
    */ 
    package com.keymantek.demo;
    
    public class MyTimer extends Thread{
    	
    	//开关控制标志位
    	public static boolean flag = false;				
    	//開始时间
    	//delay in milliseconds before task is to be executed.
    	public static Long startTime = 1000*3*60L;		
    	//循环时间
    	//time in milliseconds between successive task executions.
    	public static Long period    = 1000*5*60L;		
    
    	@Override
    	public void run() {
    		while(true)
    		{
    			try {
    				//開始时间
    				Thread.sleep(startTime);
    				//仅仅有当flag为true时,才採集相关信息
    				while(flag)
    				{
    					//业务逻辑处理块					
    					//循环时间
    					Thread.sleep(period);
    				}
    				//当flag为false时。线程歇息中
    				Thread.sleep(1000L);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    
    以下是为此线程提供的控制类:

    /** 
    * @ClassName: TimerReadElectricityMeterTable 
    * @Description: TODO 自己定义定时器线程控制类
    * @author  yc
    * @date 2014年10月16日 下午10:41:29 
    */ 
    package com.keymantek.demo;
    
    public class MyTimerController {
    
    	/**
    	 * @category 初始化自己定义定时线程
    	 */
    	public static void initMyTimer() {
    		
    		MyTimer timer=	new MyTimer();
    		timer.start();
    		System.out.println("初始化自己定义定时线程");
    	}
    	
    	/**
    	 * @category 开启自己定义定时线程
    	 * @param period 循环时间
    	 */
    	public static void startMyTimer(Long period) {
    		MyTimer.flag = true;
    		MyTimer.period = period;
    		System.out.println("开启自己定义定时线程");
    	}
    
    	/**
    	 * @category 停止自己定义定时线程
    	 */
    	public static void stopMyTimer() {
    		MyTimer.flag = false;
    		System.out.println("停止自己定义定时线程");
    	}
    }
    

    也在不断完好中,如有发现bug,请一定给出评论!




  • 相关阅读:
    关于SVN出现 svn working copy locked的原因及解决方法
    安装SVN客户端重启电脑之后,右键未出现SVN选项的原因
    Django—工程创建以及models数据库易错点
    tornado之文件上传的几种形式form,伪ajax(iframe)
    python 收录集中实现线程池的方法
    python 多线程,进程的理解
    python之路 序列化 pickle,json
    collections模块方法详解
    python之路 socket,socketsever初探
    SQL- 约束
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7262533.html
Copyright © 2011-2022 走看看