我在java中的ScheduledExecutorService有一个问题(我没有面对这个问题几天回来是什么让我很奇怪)。请找到下面的代码和控制台输出。重复执行任务之间的延迟时间为1毫秒,所以理想情况下,我应该每秒达到1000的计数(给或几毫秒),但这种情况只是没有发生。请帮助..调度执行器的准确性
CODE:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class SchedulerTest {
private static final ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
static DateFormat df= new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
private static class TestRunnable1 implements Runnable{
private int count=0;
@Override
public void run() {
count++;
if(count1 % 1000==0){
System.out.println(count1+" "+df.format(Calendar.getInstance().getTime()));
}
}
}
public static void main(String[] args){
Runnable localService = new TestRunnable1();
try{
executor.scheduleWithFixedDelay(localService, 0, 1, TimeUnit.MILLISECONDS);
}catch(Exception e){
e.printStackTrace();
}
}
}
控制台输出
1000年3月13 2013 14:43:54.477 2000年3月13 2013 14:44:10.296 3000 13- Mar 2013 2013 - 三月2013 14:44:26.381 4000 2013年3月13日14:44:42.621 5000 13-Mar-2013 14:44:55.907 6000 13-Mar-2013 14:44:58.516 7000 13-Mar- 2013 14:45:05.896 8000 13-Mar-2013 14:45:10.292 9000 13-Mar-201 3 14:45:15.129 10000年3月13 2013 14:45:18.187
感谢, 阿比纳夫
这不是你正在运行的代码(不编译)。修复编译时,我会在每次打印之间获得大约1.2-1.3秒的时间,如果时间包括调度程序中的内务管理,这似乎是合理的。如果我更改为scheduleAtFixedRate,那么我会在第二次打印时发现(至少在毫秒级别上进行测量时)。 – 2013-03-13 07:17:00
谢谢!你的建议工作:) – user2064123 2013-03-13 08:14:04