我在使用定时器时想动态的根据当前时间去执行程序比如:
9月1号执行一次
9月11号执行一次
9月21号执行一次
当启动服务器时定时器会成功执行,可当我改变时间后就执行不了了。请问下能不能时间改变时,也能够动态取得当前时间,然后当条件满足时也能够执行。public class ContextListener implements ServletContextListener { private Timer timer = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd");
String date =sdf.format(new Date());

public ContextListener() { 


public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
} public void contextInitialized(ServletContextEvent arg0) {
timer = new Timer();
if(date.equals("01")||date.equals("20")||date.equals("21")){
timer.schedule(new MyTask(),3000);
System.out.println("执行!");
}
}public class MyTask extends TimerTask { @Override
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
String date =sdf.format(new Date());
// TODO Auto-generated method stub
if(date.equals("0920")){
System.out.println("清除十二月下旬客户!");
System.out.println("执行完成!");
}
if (date.equals("0111")) {
System.out.println("清除十二月上旬客户!");
}
if(date.equals("0121")){
System.out.println("清除十二月中旬客户!");
}
System.out.println("执行........");
}}

解决方案 »

  1.   

    public class MyTask extends TimerTask {
    private int []MONTHOFDAY ={1,11,21} ;
    private static boolean isRunning = false;@Override
    public void run() {
    Calendar cal = Calendar.getInstance(); 
    if(!isRunning){
    for(int j=0;j<MONTHOFDAY.length;j++){
    if(MONTHOFDAY[j]==cal.get(Calendar.DAY_OF_MONTH)){
    isRunning = true; 
           ////处理业务
            isRunning = false; }
    }}else{
    //dothing
    }
    }}
      

  2.   


    public class MyTask extends TimerTask {
    private Date d = new Date();@Override
    public void run() {
    SimpleDateFormat sdf = new SimpleDateFormat("dd");
    String date = sdf.format(d);if(date.equals("01")||date.equals("20")||date.equals("21")){
       SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
       date =sdf.format(new Date());   if(date.equals("0920")){
    }
      

  3.   


    public class MyTask extends TimerTask {
    private Date d = new Date();@Override
    public void run() {
    SimpleDateFormat sdf = new SimpleDateFormat("dd");
    String date = sdf.format(d);if(date.equals("01")||date.equals("20")||date.equals("21")){
       SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
       date =sdf.format(d);   if(date.equals("0920")){
    }