自己定义定时器(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,请一定给出评论!
自己定义定时器(Timer)的更多相关文章
- Java进阶(十八)Java实现定时器(Timer)
Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...
- Android 定时器Timer的使用
定时器有什么用 在我们Android客户端上有时候可能有些任务不是当时就执行,而是过了一个规定的时间在执行此次任务.那么这个时候定时器的作用就非常有用了.首先开启一个简单的定时器 Timer time ...
- storm定时器timer源码分析-timer.clj
storm定时器与java.util.Timer定时器比较相似.java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks:storm定时器也有一个线程负责调度所拥有的& ...
- Java队列和定时器Timer
一: Queue详解 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.Linked ...
- Python之路(第四十五篇)线程Event事件、 条件Condition、定时器Timer、线程queue
一.事件Event Event(事件):事件处理的机制:全局定义了一个内置标志Flag,如果Flag值为 False,那么当程序执行 event.wait方法时就会阻塞,如果Flag值为True,那么 ...
- Java基础_死锁、线程组、定时器Timer
一.死锁问题: 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. 比如,线程一需要第一把所,此时锁处于空闲状态,给了 ...
- Go定时器--Timer
目录 前言 Timer 定时器 简介 使用场景 1. 设定超时时间 2. 延迟执行某个方法 Timer对外接口 1. 创建定时器 2. 停止定时器 3. 重置定时器 其他接口 1. After() 2 ...
- python中实现定时器Timer
实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thre ...
- 订餐系统之定时器Timer不定时
经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统日志中会有警告,如果您有更好的方案 ...
随机推荐
- iOS隐藏导航栏底部灰线
首先创建 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #de38a5 } span.s1 { } span.s ...
- VUE父子组件传值问题
一.父组件向子组件传递数据 组件实例的作用域是孤立的.这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据.要让子组件使用父组件的数据,我们需要通过子组件的props选项. 1.静态props ...
- 全排列Permutations
描述 Given a collection of numbers, return all possible permutations.For example,[1,2,3] have the foll ...
- 8. 理解ZooKeeper的内部工作原理
到目前为止,我们已经讨论了ZooKeeper服务的基础知识,并详细了解了数据模型及其属性. 我们也熟悉了ZooKeeper 监视(watch)的概念,监视就是在ZooKeeper命名空间中的znode ...
- 函数chdir、fchdir和getcwd
函数chdir.fchdir和getcwd chdir.fchdir函数 每个进程都有一个当前工作目录,当前目录是进程的一个属性 当用户登录UNIX系统时,其当前工作目录通常是口令文件 ...
- 洛谷 P3391 【模板】文艺平衡树
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...
- csv格式订单下载,完成后伴随邮件通知下载
前言 功能开发中会遇到大量订单下载,而服务器的请求响应时间又配置的很短,导致下载时候请求超时. 这篇文章主要思路:异步查询数据,生成csv文件,放入email中并发送给用户.(异步部分本文不做介绍,配 ...
- 【复习】VueJS之内部指令
Vuejs 源码:https://github.com/zhuangZhou/vuejs 下载Vue.js 官网:http://vuejs.org live-server使用 live-server是 ...
- TFboy养成记 tf.cast,tf.argmax,tf.reduce_sum
referrence: 莫烦视频 先介绍几个函数 1.tf.cast() 英文解释: 也就是说cast的直译,类似于映射,映射到一个你制定的类型. 2.tf.argmax 原型: 含义:返回最大值所在 ...
- 十五、Hadoop学习笔记————Zookeeper的环境搭建
linux中/opt一般用来存放应用/var目录一般用来存放日志 sample为样例文件,复制一份zoo.cfg文件 配置zoo文件,id为服务器id(整数),host为服务器的ip地址,第一个por ...