当前位置: 代码迷 >> Java相关 >> timer定时任务解决方案
  详细解决方案

timer定时任务解决方案

热度:5561   发布时间:2013-02-25 21:45:35.0
timer定时任务
timer可以在固定时间进行一个task,如果想固定在周三的14:00,如何去进行判断比较合理?

------解决方案--------------------------------------------------------
用quartz吧
------解决方案--------------------------------------------------------
比较笨的方法是:每一个小时执行一次,然后判断时间是否合你的要求

用框架比较好
------解决方案--------------------------------------------------------
Java code
Timer timer  = new Timer();                Calendar cal = Calendar.getInstance();                switch (cal.get(Calendar.DAY_OF_WEEK)) {        case Calendar.SUNDAY:            cal.add(Calendar.DAY_OF_MONTH, 3);break;        case Calendar.MONDAY:            cal.add(Calendar.DAY_OF_MONTH, 2);break;        case Calendar.TUESDAY:            cal.add(Calendar.DAY_OF_MONTH, 1);break;        case Calendar.THURSDAY:            cal.add(Calendar.DAY_OF_MONTH, 6);break;        case Calendar.FRIDAY:            cal.add(Calendar.DAY_OF_MONTH, 5);break;        case Calendar.SATURDAY:            cal.add(Calendar.DAY_OF_MONTH, 4);break;        default:            break;        }                String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());                timer.schedule(new TimerTask() {            public void run() {                //do someThing            }        }, new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(dateStr+" 14:00"), 1000*60*60*24*7);
------解决方案--------------------------------------------------------
Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).
------解决方案--------------------------------------------------------
Java code
import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TimerManager {    // 时间间隔    private static final long PERIOD_DAY = 7 * 24 * 60 * 60 * 1000;//7天。    public TimerManager() {        Calendar calendar = Calendar.getInstance();        /*** 定制周三的14:00执行方法 ***/        System.out.println(calendar.get(Calendar.DATE));        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));        int nextDateDistance = Calendar.WEDNESDAY - calendar.get(Calendar.DAY_OF_WEEK);                         calendar.set(Calendar.DATE,calendar.get(Calendar.DATE) + nextDateDistance);//设置星期三        calendar.set(Calendar.HOUR_OF_DAY, 14);//设置时间        calendar.set(Calendar.MINUTE, 0);        calendar.set(Calendar.SECOND, 0);        Date date = calendar.getTime(); // 第一次执行定时任务的时间        if (date.before(new Date())) {            date = this.addDay(date, 7);//如果上次日期过期了,+7天变成有效日期        }        Timer timer = new Timer();        TimerTask task = new TimerTask() {            @Override            public void run() {                System.out.println("your personal logic");            }        };        // 安排指定的任务在指定的时间开始进行重复的固定延迟执行。        timer.schedule(task, date, PERIOD_DAY);    }    // 增加或减少天数    public Date addDay(Date date, int num) {        Calendar startDT = Calendar.getInstance();        startDT.setTime(date);        startDT.add(Calendar.DAY_OF_MONTH, num);        return startDT.getTime();    }    public static void main(String args[]) {        new TimerManager();    }}
------解决方案--------------------------------------------------------
任务调度的东西非常复杂,不建立使用 Timer 去做,直接使用 Quartz 吧。

就是一个每周三 14 点执行这么简单的功能,自行实现的话需要有很深厚的多线程开发经验!
  相关解决方案