do循环无限期执行

时间:2013-11-28 10:54:33

标签: java

do
            {
                Long time = startTime.getTime()+(((59*60)+59)*1000);
                Date endTime = new Date(time); 
                System.out.println("INFO:   Calling startWork("+startTime+","+endTime+")");

                startWork(startTime,endTime);
                System.out.println("Info ");
                startTime = new Date (startTime.getTime()+(60*60*1000));
                systemHour = new Date(new Date().getYear(),new Date().getMonth(),new Date().getDate(),new Date().getHours(),0,0);
                String stringToUpdateLastProcessedTime = "update meter_thread set last_processed_time='"+sdf.format(startTime)+"' where name='Kochi Occupancy' ";
                mysqlStatement.executeUpdate(stringToUpdateLastProcessedTime);  

            }while(startTime.getTime()!= systemHour.getTime());

上次处理的时间取自数据库表,可能是当前时间之前的任何时间,并在每次数据提取后更新。

上面的代码应该在while循环为真后停止,但它没有。代码中的问题是什么?

1 个答案:

答案 0 :(得分:4)

条件非常准确:

startTime.getTime()!= systemHour.getTime()

如果循环错过了结束时间,即使是最小的单位,它也会永远持续下去。

你想要的东西有一个真实的一面(例如一直到-infinity)和一个假的一面(例如一直到正无穷大)所以;

startTime.getTime()<= systemHour.getTime()

startTime.getTime()>= systemHour.getTime()

取决于程序的逻辑

在条件

中使用开始时间

我在最后一节中已将这两种情况包括在内,因为逻辑似乎不清楚。我希望看起来像

的情况
currentTime.getTime()<=endTime.getTime()

这样它问问题&#34;当前时间是否小于我们结束循环的时间&#34;。在计算endTime的情况下,当循环开始时(例如从现在起1小时),您认为合适