比如一个程序中有一个线程,每过30秒统计一次结果,那么这个统计时间点怎么确定?
如:开始时间 time
if(((System.currentTimeMillis()-time)%30000)==0){
。
}
这样可以吗,
但好像程序本身有执行时间 可能在30秒时间点左右 这样也可以 有好的算法吗??
如:开始时间 time
if(((System.currentTimeMillis()-time)%30000)==0){
。
}
这样可以吗,
但好像程序本身有执行时间 可能在30秒时间点左右 这样也可以 有好的算法吗??
解决方案 »
- 刚学到awt工具集,有个例子执行后却没有半点反应,是不是少了什么?
- SWT shell 窗体如何在桌面中央显示?
- 责任链模式代码写了70%,卡住了,关于比武的小例子。
- 请问下面"这一句话"怎么理解:(关于static,初始化,异常)
- JAVA爬虫 WebCrawler Spider
- 如何执行BAT文件?别告诉我Runtime.getRuntime().exec(“x.bat”),它根本不行。
- 请问怎样监听多个端口?
- try语句块中的return和finally中的try语句返回的结果存放在内存的哦什么地方
- jcreator 和 jbuilder 那个好用?
- 在java裡怎麼從一個文件裡一個一個的讀出字符(不知道文件裡有多少個字符)?
- 这代码为什么会出错?麻烦大伙帮忙分析分析!
- Hibernate 3.6.0CR2 问题
可以用System.currentTimeMillis()-time)-30000>0来判断
不知这个答案可以吗?
if((System.currentTimeMillis()-time)>30000){
。
time=System.currentTimeMillis();
}
final long interval = 30000; //30秒
long executeTime = System.currentMilisecond();
while(true){
handleYourBusiness();
long sleepTime = 0;
do {
executeTime += interval;
sleepTime = executeTime - System.currentMilisecond();
} while(sleepTime > 0);
Thread.sleep(sleepTime);
}
}因为每次时按照理论执行时间计算的时间点,所以即使处理时间有波动,也不会导致下一次执行时间有误差。执行花费的时间长了,sleep的时间就短了。
基本上,避免累计误差都是这么写的