for (;;) {


Date date = new Date();
int count = 1;
if (date.getDay() == 1) {
if(count==1){
System.out.println("start thread");
count++;
}

}

try {
sleep(200);
} catch (Exception e) {
e.printStackTrace();
}


}
我编写的这个会陷入死循环星期一执行很多次,但是我想让它星期一只执行一次,其他的日期一直检查是不是到了星期一。如果是星期一,程序只执行一次。有没有人知道怎么实现这个功能?

解决方案 »

  1.   

    这样行不行
    boolean isStarted = false;
    if (date.getDay() == 1) {
    if(!isStarted){
    System.out.println("start thread");
    isStarted = true;
    }
    }else{
    if(isStarted){
     isStarted = false;
    }
    }
      

  2.   

    sleep(200) 时间不够,200毫秒执行一次。
    而你的程序中的判断条件date.getDay() == 1 应该是1天才执行一次。
    如果不管星期一什么时候执行的话,那就把200改成1000*3600*24
    如果要求星期一某个小时执行的话,毫秒改小点,判断条件再加条件
      

  3.   

    quartz是一个已经实现的很好的按时处理框架,可以用它来做
      

  4.   

    我一般一个任务只处理一次任务. 然后用windows计划任务来调度.
      

  5.   

    用死循环只会让自己死的很难看,^_^
    如果时间要求不是很实时的话,可以用Timer。如果很实时推荐用quartz
      

  6.   

    public class Task { public static void main(String[] args) throws Exception {
    int day_of_week = Calendar.MONDAY;
    String cmd = "C:\\Program Files\\TTPlayer\\TTPlayer.exe";
    wakeAt(day_of_week, cmd);
    } public static void wakeAt(int dayOfWeek, String cmd) throws Exception{
    Conica.pl("starting.....");
    while(true){
    Calendar current = Calendar.getInstance();
    if(current.get(Calendar.DAY_OF_WEEK) == dayOfWeek) {
    Runtime.getRuntime().exec(cmd);
    }
    Thread.currentThread().sleep(1000);
    }
    }
    }