我希望仅在以下两个条件均为真时打印出"Hello World"
;
isDone
变为真。这来自另一个服务,基本上是检查某个进程是否已完成。否则我将继续睡觉,直到上述两种情况都成立。以下是我的代码:
public static void main(String[] args) {
DateTime dt = new DateTime();
int hour = dt.getHourOfDay();
if (hour < 20) {
TimeUnit.HOURS.sleep(20 - hour);
}
boolean isDone = checkStatus();
while (!isDone) {
TimeUnit.MINUTES.sleep(15);
isDone = checkStatus();
}
// now print out
System.out.println("Hello World");
}
正如您所看到的,我分别有两个不同的条件进行检查,然后在最后打印出来。有没有更好的方法来编写上面的代码来完成同样的事情?
它不必完全准确。我每15分钟调用一次checkStatus
方法,看看isDone
是否成为现实。
答案 0 :(得分:1)
应用程序中存在一个错误,如果碰巧发生在上午8点之后,但checkStatus
在午夜之前没有返回true
,那么它将在白天继续执行
将两个条件放在循环中:
boolean isDone = false;
while (!isDone) {
int hour = new DateTime().getHourOfDay();
isDone = hour >= 20;
if (!isDone) TimeUnit.HOURS.sleep(20 - hour);
isDone = checkStatus();
if (!isDone) TimeUnit.MINUTES.sleep(15);
}
System.out.println("Hello World");
答案 1 :(得分:0)
可能会这样帮助你。
public boolean CheckHour(){
DateTime dt = new DateTime();
int hour = dt.getHourOfDay();
if (hour < 20) {
TimeUnit.HOURS.sleep(20 - hour);
return false;
}
return true;
}
boolean isDone = checkStatus();
while (!isDone || !CheckHour()) {
TimeUnit.MINUTES.sleep(15);
isDone = checkStatus();
}
// now print out
System.out.println("Hello World");
答案 2 :(得分:0)
您的代码要求并不完全清楚,因为如果checkStatus
在午夜之前没有返回true
,则您的原始帖子未指定您是否希望代码停止。我根据您的原始帖子编写了以下解决方案:
否则我将继续睡觉,直到上述两种情况都成立为止
我接受上述引用意味着您希望您的程序始终处于睡眠状态,除非它是晚上8点或更晚(当地时间)并且checkStatus
方法返回true
。
在发布任何代码之前,我想指出3件事:
这是我提出的代码(我添加了一些System.out调用来帮助说明发生了什么):
import java.time.LocalTime;
import java.util.concurrent.TimeUnit;
...
private static final LocalTime EIGHT_PM = LocalTime.of(20, 0);
public static void main(String[] args) {
while(true){
LocalTime now = LocalTime.now();
if(now.isBefore(EIGHT_PM)){
System.out.println(now + " It is before 8PM, sleeping 1 minute");
try {
TimeUnit.MINUTES.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(checkStatus()){
System.out.println("It is 8PM or later and external process is done.");
break;
}else{
System.out.println("It is 8PM or later, but external process is not done. Sleeping 15 minutes.");
try {
TimeUnit.MINUTES.sleep(15);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// now print out
System.out.println("Hello World");
}