二、定时器的应用

public void schedule(TimerTask task, long delay):task:要执行的任务  delay:延迟多少毫秒执行任务。

public void schedule(TimerTask task, long delay, long period):period:第一次任务执行之后,每隔多少毫秒循环执行任务。

1、delay 毫秒之后执行任务

    new Timer().schedule(new TimerTask() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("bombing!");
                
            }
        }, 3000);

2、首先 delay 毫秒后执行任务,然后每相隔 period 毫秒后循环执行任务。

        new Timer().schedule(new TimerTask() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("bombing!");
                
            }
        }, 3000,2000);

3、首先 delay 毫秒后执行任务,然后每隔两秒执行一次,在每隔3秒执行一次,如此循环。

new Timer().schedule(new MyTimerTask(), 2000);

class MyTimerTask extends TimerTask{
    //通过奇数偶数来判断要隔几秒。
    //如果是奇数就隔4000
    //如果是偶数就隔2000
    static int count=0;
    @Override
    public void run() {
        count=(count+1)%2;
        System.out.println("bombing!");
        // 使用了递归的思想
        new Timer().schedule(new MyTimerTask(), 2000+2000*count);
    }

4、测试结果:

5、通过线程池来实现定时任务线程

ScheduledExecutorService  threadPools = Executors.newScheduledThreadPool(2);

1、java.util.concurrent.ScheduledExecutorService的实现,该接口继承ExecutorService

2、可以通过execute方法来执行线程,但是这样就不能实现定时的作用。

3、调用schedule方法来完成调度,跟定时器实现一样public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);  

Executors.newScheduledThreadPool(3).schedule(new Runnable() {
            //十秒以后爆炸
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("booming!");
            }
        }, 10, TimeUnit.SECONDS);

 

posted @ 2016-07-03 20:16  LyJs  阅读(444)  评论(0编辑  收藏  举报