java timer timertask

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();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值