无论日期如何,如何在特定时间段之间执行任务

时间:2013-10-15 16:27:14

标签: java

我的应用程序中有一个Thread,它一直运行直到应用程序停止。

我想将其行为更改为仅在上午9点到下午6点的时间段内运行,而不管日期

根据以下建议,我已经这样做了 如果这有任何负面影响,请告诉我。

package com;

import java.util.Calendar;

public class ContinousThread extends Thread {
    public void run() {

        while (true) {
            Calendar c = Calendar.getInstance(); // is automatically initialized to
            int hour = c.get(Calendar.HOUR_OF_DAY);
            boolean run = hour >= 9 && hour < 18;
            if (run) {
                doSomething();
            } else {
                System.out.println("No");
            }
        }
    }

    public void doSomething() {
        // actual task
    }

    public static void main(String args[]) {

        ContinousThread ct = new ContinousThread();
        ct.start();
    }
}

2 个答案:

答案 0 :(得分:3)

使用Calendars get(field)方法获取小时:

 Calendar c = Calendar.getInstance(); // is automatically initialized to current date/time
 int hour = c.getField(Calendar.HOUR_OF_DAY);
 boolean run = hour >= 9 && hour < 18;

答案 1 :(得分:2)

  

我已经这样做了,请告诉我这是否有任何负面影响   冲击

有。

boolean run = hour >= 9 && hour < 18;
if (run) {
    doSomething();
} else {
    System.out.println("No");
}

runfalse时,您有"busy loop"。这会让cpu忙,非常忙。并在控制台上打印 No

一种方法是在sleep块中放置else。你可以在18:00长时间睡觉,计算你与下一个9:00的距离,然后睡多少(或少一点)