您的位置:首页 > 其它

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();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: