一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

java中一个定时程序

时间:2011-12-31 编辑:简简单单 来源:一聚教程网

自己封装一个类

 代码如下 复制代码

package com.anllin.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ScheduleUtil
{
    private static DateFormat format()
    {
        return new SimpleDateFormat("HH:mm:ss:SSS");
    }

    private static Date parseTime(String time) throws ParseException
    {
        return format().parse(time);
    }

    private static long getOneDayMilliseconds()
    {
        return 24 * 60 * 60 * 1000L;
    }

    private static long getMillisecondsInOneDayBetween(String now, String future) throws ParseException
    {
        Date nowDate = parseTime(now);
        Date futureDate = parseTime(future);
        long nowTime = nowDate.getTime();
        long futureTime = futureDate.getTime();
        if (futureTime > nowTime)
        {
            return futureTime - nowTime;
        }
        else
        {
            return (futureTime + getOneDayMilliseconds()) - nowTime;
        }
    }

    public static void scheduleEveryday(ScheduledThreadPoolExecutor executor, Runnable command,
            String executedEverydayAt) throws ParseException
    {
        long initialDelay = getMillisecondsInOneDayBetween(format().format(new Date()), executedEverydayAt);
        long period = getOneDayMilliseconds();
        executor.scheduleAtFixedRate(command, initialDelay, period, TimeUnit.MILLISECONDS);
    }
}

调用方法

 代码如下 复制代码

public static void main(String[] args) throws Exception
    {
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(5);
        String executedEverydayAt = "12:00:00:000";
        ScheduleUtil.scheduleEveryday(executor, new Runnable(){
            public void run()
            {
                System.out.println("执行业务逻辑");
            }
        }, executedEverydayAt);
    }

热门栏目