-1

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

无论日期如何,我都想将其行为更改为仅在上午 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();
    }
}
4

2 回答 2

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;
于 2013-10-15T16:33:36.247 回答
2

我已经这样做了,如果这有任何负面影响,请告诉我

有。

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

run你什么时候false有一个“忙循环”。这会使cpu忙,非常忙。并且还在控制台上打印大量No

一种方法是将 asleep放入else块中。你可能会睡很长时间18:00,计算你离下一个有多远,9:00然后睡那么多(或少一点)

于 2013-10-15T18:25:56.890 回答