2.传统定时器技术回顾 - Timer类 TimerTask
2015-07-10 11:06
501 查看
java.util
类 Timer
java.lang.Object java.util.Timer
方法摘要 | |
---|---|
void | cancel() 终止此计时器,丢弃所有当前已安排的任务。 |
int | purge() 从此计时器的任务队列中移除所有已取消的任务。 |
void | schedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。 |
void | schedule(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行。 |
void | schedule(TimerTask task, long delay) 安排在指定延迟后执行指定的任务。 |
void | schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。 |
void | scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定速率执行。 |
void | scheduleAtFixedRate(TimerTask task, long delay, long period) 安排指定的任务在指定的延迟后开始进行重复的固定速率执行。 |
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import org.junit.Test;
/**
* 传统定时器
* 工具 quartz 可以完成在周几执行任务的需求
* @author LiTaiQing
*/
public class TraditionalTimerTest {
/**
* 传统定时器的使用实例
*/
@Test
public void test1(){
/*
* schedule 调度
* Timer是定时器
* TimerTask是定时器的任务
*/
new Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("bombing!");
}
}, 10000,3000);//第一次执行是10秒之后,以后每隔3秒执行一次
printSeconds();
}
/**
* 实现刚开始2秒执行,之后4秒执行一次
* 代码思想从每次2秒执行一次改到目标结果
*/
//通过一个标记,判断当前任务应该多少秒后执行
private staticint count = 0;
@Test
public void test2(){
/**
* 内部类内部不能出现静态变量。
*/
class MyTimerTask extends TimerTask{
@Override
public void run() {
count = (count + 1)%2;
System.out.println("bombing!");
new Timer().schedule(
/*new TimerTask(){
@Override
public void run() {
System.out.println("bombing!");
}
}*/
new MyTimerTask(), 2000+2000*count);
}
}
new Timer().schedule(new MyTimerTask(),2000);
printSeconds();
}
/**
* “实现任务刚开始2秒执行,之后4秒执行一次”的另一种方法
*/
@Test
public void test3(){
new Timer().schedule(new MyTimerTask2(), 2000);
printSeconds();
}
class MyTimerTask1 extends TimerTask{
@Override
public void run() {
System.out.println("bombing!");
new Timer().schedule(new MyTimerTask2(), 2000);
}
}
class MyTimerTask2 extends TimerTask{
@Override
public void run() {
System.out.println("bombing!");
new Timer().schedule(new MyTimerTask1(), 4000);
}
}
private void printSeconds(){
while(true){
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相关文章推荐
- mongodb的基本操作
- 关于<img>标签无法显示名字中带有中文的图片的问题
- GRE写作必备句型
- 多维数组的指针类型转换和参数传递
- 要么忍,要么狠,要么滚
- 搜索引擎系列1:什么是正向索引?什么是倒排索引?
- 选项卡模式设计
- MyEclipse中Maven的配置
- 1.传统线程技术的回顾-JDK5多线程
- 【设计模式】动态代理Proxy_02
- 《算法4》中的堆排序
- 053第170题
- 关于 gitblite 配置的重点
- 安装Boost.Numpy
- Highcharts延x轴缩小
- 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接
- asp.net实现三层架构的例子
- (二)androidpn-server tomcat版源码解析之--push消息处理
- 操作4 mongodb备份脚本
- NSCharacterSet 最常用的用法