package com.thread_test;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by zhen on 2017-05-25.
*/
public class TraditionalTimerTest {
static int count = 0;
public static void main(String[] args){
/**
* 传统定时器
* 定时器是Timer类
* Timer类主要使用schedule定时在某个时刻执行某件任务,任务是TimerTask对象
*/
Timer timer = new Timer();
/* timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("bombing!");
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("bombing!");
}
}, 2000);
}
}, 4000, 6000);*/
class MyTimerTask extends TimerTask{
@Override
public void run() {
count = (count + 1) % 2;
System.out.println("bombing!");
timer.schedule(new MyTimerTask(), 4000 - 2000*count);
}
}
timer.schedule(new MyTimerTask(), 4000);
// public void schedule(TimerTask task, long delay)
//可以使用public void schedule(TimerTask task, long delay, long period)实现连环炸,period是后面每次炸的周期
/**
* 现在要求实现先4秒,后两秒交替不间断爆炸
* 我的思路:
* 第一次4秒开启定时任务爆炸,并且任务周期为6秒
* 在任务过程中开启另一个定时任务,一次性,2秒后爆炸
* 编码,测试,效果可以实现
* 思路2:
* 不使用周期任务,先第一个任务执行,定时4秒,爆炸同时开启第二个任务,第二个任务定时2秒,第二个任务爆炸同时开启第三个任务,定时4秒...
* 这样也可以实现,需要在Task中判断生成另一个Task并调度,每次调度改变一个状态变量的值,依据状态进行选择
* 也可以使用两个不同的TimerTask任务类,这样简单点。
*/
new Thread(){//监控者
@Override
public void run() {
while(true){
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
/**
* 我们经常需要的定时任务。
* 比如每天凌晨2:00发个邮件,怎么弄呢?
* public void schedule(TimerTask task, Date time)
* public void schedule(TimerTask task, Date firstTime, long period)
* schedule的第二个参数可以传递date类型,然后周期就设置为1天的long值即可,让它第一次在指定时间爆炸
*
* 如果我们需要星期12345发邮件,星期六星期天不发怎么办呢?
* 我的想法是我们在任务中进行判断,进行日历的判断,如果是在指定星期内,那么才执行。
*
* 更精细的任务的我们可以借助开源项目Quartz,知道这个项目,需要的时候学习使用它即可。
*/
}