Java多线程与并发库高级应用-传统定时器技术回顾

传统定时器技术回顾(jdk1.5以前)

   

public class TraditionalTimerTest {
    static int count = 0;
    public static void main(String[] args) {
        
        //10秒后开始执行,每隔3秒执行一次
        new Timer().schedule(new TimerTask() {
            
            @Override
            public void run() {
                System.out.println("bombing...");
                
            }
        }, 10000,3000);
        
        /**
         *  需求:2秒,4秒间隔执行定时任务
         */
        class MyTimerTask extends TimerTask{
            @Override
            public void run() {
                count = (count+1)%2;
                System.out.println("bombing...");
                new Timer().schedule(new MyTimerTask(), 2000 + 2000*count);
            }
        }
        new Timer().schedule(new MyTimerTask(), 2000);
        
        
        while(true){
            try {
                System.out.println(new Date().getSeconds());
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
      //对于较复杂的业务,
周一~周五执行任务,周六日不执行
       //quartz 

} }

 还有一种方式,定义两个定时器

public class TimerTask1 extends TimerTask{

    @Override
    public void run() {
        System.out.println("bombing...");
        new Timer().schedule(new MyTimerTask2(), 4000);
    }

}

 

 

public class MyTimerTask2 extends TimerTask{

    @Override
    public void run() {
        System.out.println("bombing...");
        new Timer().schedule(new TimerTask1(), 2000);
    }

}

 

new Timer().schedule(new TimerTask1(), 2000);
        
        while(true){
            System.out.println(new Date().getSeconds());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

 

posted @ 2016-11-04 00:05  wq3435  阅读(510)  评论(0)    收藏  举报