关于nanoTime

luqing414 2010-04-12 10:01:49
我现在要做一个提醒的小程序,如果满足某条件,则每隔10分钟打印一次(也就是提醒一次),一开始用currentTimeMillis()感觉很不准,就改用nanoTime,但发现还是有很大问题

public void sendMessage(){
new Thread() {
public void run() {
try {
boolean flag = true;
long starttime = 1l;
long endtime = 1l;

while(flag){
if(readFromTxt().equals("yes")){
if(endtime - starttime > 1000 * 1000 * 1000 * 600 || endtime - starttime == 0){
HumanResourceBO bo = new HumanResourceBO();
Result result = bo.getRetireWarning(dayleft);
ESSBean[] beans = result.getAllBeans();

if(beans != null && beans.length != 0){
starttime = System.nanoTime();
WarningPO po = null;
String SMS_CONTENT = "";
String url = "";

for(int i = 0; i < beans.length; i++){
po = (WarningPO)beans[i];
SMS_CONTENT = po.getOrgname() + "的" + po.getUserName() + "将于" + String.valueOf(po.getRetiredate()).substring(0,10) + "退休";

System.out.println(SMS_CONTENT);

}

}
}
endtime = System.nanoTime();
}
else
flag = false;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();

我不知是不是我逻辑写的有问题,endtime - starttime > 1000 * 1000 * 1000 * 600 应该是判断是否大于10分钟才会执行里面的打印吧,但我运行时发现他压根就没停,我断点跟了,发现starttime为4630644850788,endtime为4635098372383,明明不满足条件啊,为什么还能进循环,真是糊涂了,后来我改成endtime - starttime > 1000 * 1000 * 1000 * 10,也就是每隔10秒打印一次,发现虽然不准确,大概2,3秒就打印了一次,但最起码中间是有停顿了,完后我也试过改成5秒和20秒,结果都不停,就10秒有的作用,不知为什么啊
...全文
171 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
luqing414 2010-04-12
  • 打赏
  • 举报
回复
找到原因了,是我没有加l(应该用long型),已经超出了int的范围,所以比较的结果有问题,我一开始是用的TimerTask,但它有个弊端,你就算关闭了程序,它依然在运行,除非重启计算机,算了,来接分吧
marf_cn 2010-04-12
  • 打赏
  • 举报
回复
nanoTime用于计算相对时间,我觉得你这个需求用timertask最好,你可以试一下:

import java.util.Timer;

class TimerTaskTest extends java.util.TimerTask {

@Override
public void run() {
System.out.println("start");
}
}

public class Test {

public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTaskTest(), 1000, 2000);
try {
Thread.sleep(1000);
} catch (Exception ex) {
timer.cancel();
}
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧