package com.wang.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.cassandra.cli.CliParser.newColumnFamily_return;
import com.wang.Date.DateUtil;
public class SecondTimer {
public void test(){
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("aaaaaaaaaaaaaaa");
timer.cancel();//在任务中取消timer
}
}, 1000);
}
public void test2(){
final Timer timer = new Timer();
final int k = 5;
timer.scheduleAtFixedRate(new TimerTask() {
int i=0;
@Override
public void run() {
if(i>k){
System.out.println("bbbbbbbbbbbbbbb");
timer.cancel();
System.out.println("cccccccccccccccc");
}else{
System.out.println("bbbbbbb");
}
i++;
}
}, 1000, 1000);
}
Timer timer = new Timer();
public void test3(){
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("aaaaaaaaa");
}
}, 1000, 1000);
stopTimer();
}
/**
* 取消timer任务
*/
public void stopTimer(){
try {
Thread.sleep(5000);
timer.cancel();
timer = null;
// timer = new Timer();//加上这句话进程就不会停止了
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
MyTimerTask myTimerTask1 = new MyTimerTask("taskName1111");
MyTimerTask myTimerTask2 = new MyTimerTask("taskName2222");
public void test4(){
timer.schedule(myTimerTask1, 1000, 1000);
timer.schedule(myTimerTask2, 2000,3000);
stopTimerTask();
}
/**
* 取消timerTask任务
*/
public void stopTimerTask(){
try {
Thread.sleep(10000);
myTimerTask1.cancel();
System.out.println("停止myTimerTask1");
Thread.sleep(10000);
myTimerTask1 = null;
myTimerTask1 = new MyTimerTask("taskName33333");
timer.schedule(myTimerTask1, 1000, 1000);
Thread.sleep(10000);
System.out.println("timer取消");
timer.cancel();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
SecondTimer secondTimer = new SecondTimer();
// secondTimer.test();
// secondTimer.test2();
// secondTimer.test3();
secondTimer.test4();
}
class MyTimerTask extends TimerTask{
private String taskName;
public MyTimerTask(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
System.out.println(taskName+"执行时间"+DateUtil.showDateToString(new Date()) );
}
}
}
下面是学习思考用的,不能使用
public class FirstTimer {
Timer timer = new Timer();
TimerTask timerTask = null;
public void test(){
timer.scheduleAtFixedRate(buildTimerTask(), 3000, 1000);
}
public TimerTask buildTimerTask(){
if(timerTask==null){
timerTask = new TimerTask() {
@Override
public void run() {
System.out.println(DateUtil.showDateToString(new Date()));
// timer.cancel();
}
};
}
return timerTask;
}
public void cancel1(){
try {
timer.cancel();//取消后,不能再次执行,需要重新new一个
timer = null;
timer = new Timer();//停止后添加任务,直接调用test()不行,因为TimerTask没有new一个新的 //停止后,不能再次new Timer否则进行不会关闭
// timer.scheduleAtFixedRate(buildTimerTask(), 3000, 1000);//这样不行
timer.scheduleAtFixedRate(new TimerTask() {//这样可以
@Override
public void run() {
System.out.println("aaaaaaaaaaaaaa");
}
}, 1000, 1000);
} catch (Exception e) {
timerTask.cancel();
e.printStackTrace();
}
}
public void cancel2(){
try {
System.out.println("timer.purge()timer.purge()timer.purge()="+timer.purge());
timer.cancel();//取消后,不能再次执行,需要重新new一个
timer = null;
timer = new Timer();
timerTask.cancel();
timerTask = null;
System.out.println("cancel2()cancel2()cancel2()");
// timer.scheduleAtFixedRate(buildTimerTask(), 3000, 1000);
} catch (Exception e) {
timerTask.cancel();
e.printStackTrace();
}
}
public void test3(){
//timer和timerTask 都能取消任务,但是取消后,都需要 =null,然后new 一个新的Timer 或者TimerTask才能再次运行
//timer.cancel是整个定时器取消了,timerTask是任务取消了
}
public void test4(){
timer.schedule(buildTimerTask(), 0);
}
public static void main(String[] args) {
FirstTimer firstTimer = new FirstTimer();
firstTimer.test();
// firstTimer.test4();
try {
Thread.sleep(10*1000);
// firstTimer.cancel1();
firstTimer.cancel2();
System.out.println("bbbbbbbbbbbbbbbb");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}