java用线程实现定时器

现在的框架的功能很强大,封装好了各种功能,例如用spring框架实现定时功能只需在配置文件里配置即可,但是我们还是要学会如何用java代码实现定时器功能。
在java中有Timer和TimerTask这两个类,下面我们就利用这两个类来实现定时器,具体某些方法的用法可以参考API。
实现这样一个定时器的有如下步骤:首先定义一个用来实现你定时要做什么事情的类,这个类继承TimerTask类,然后重写这个类的run()方法,再定义一个Timer对象,用来设置什么时候执行需要执行任务。
下面是代码还有结果:

public class TimerTest {

    //时间间隔,注意这里为了效果是每隔一分钟执行一次,正确的PERIOD_DAY是 24 * 60 * 60 * 1000
    private static final long PERIOD_DAY = 60 * 1000;

    private static class MyTimerTask extends TimerTask{

        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println("时间:"+new Date().toString());
        }

    }

    public static void main(String[] args)throws ParseException{
        MyTimerTask myTimerTask=new MyTimerTask();
        Calendar calendar = Calendar.getInstance();            

        //设置定时的时间
        calendar.set(Calendar.HOUR_OF_DAY, 21);
        calendar.set(Calendar.MINUTE, 32);
        calendar.set(Calendar.SECOND, 0);

        Date date=calendar.getTime(); //第一次执行定时任务的时间

        //如果第一次执行定时任务的时间 小于 当前的时间
        //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
        if (date.before(new Date())) {
            Calendar startTime = Calendar.getInstance();
            startTime.setTime(date);
            startTime.add(Calendar.DAY_OF_MONTH, 1);
            date = startTime.getTime();
        }

        Timer timer=new Timer();
        //每隔PERIOD_DAY毫秒执行一次myTimerTask,第一次执行时间是date
        timer.schedule(myTimerTask, date, PERIOD_DAY);
    }

}

结果:
时间:Thu Oct 19 21:32:00 CST 2017
时间:Thu Oct 19 21:33:00 CST 2017
时间:Thu Oct 19 21:34:00 CST 2017

猜你喜欢

转载自blog.csdn.net/luqiren/article/details/78289912