繁体   English   中英

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

[英]How to execute a task between a certain time period regardless of the Date

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

我想将其行为更改为仅在从上午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();
    }
}

使用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;

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

有。

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

如果runfalse ,则将出现“忙循环” 这会使cpu变得非常繁忙。 并在控制台上打印大量No

一种方法是在else块中sleep 您可能可以在18:00睡很长时间,计算距下一个9:00距离,然后睡那么长时间(或少一点)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM