java - 预定执行者准确率

标签 java scheduledexecutorservice

我在java中遇到了ScheduledExecutorService的问题(几天前我没有遇到这个问题,这让我感到很奇怪)。请找到下面的代码和控制台输出。重复执行任务之间的延迟为 1 毫秒,因此理想情况下我每秒应该达到 1000 次(或多或少几毫秒),但这并没有发生。请帮忙..

代码:

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 13-Mar-2013 14:43:54.477
2000 13-Mar-2013 14:44:10.296
3000 13-Mar-2013 14:44:26.381
4000 13-Mar-2013 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-2013 14:45:15.129
10000 13-Mar-2013 14:45:18.187

最佳答案

您想要使用 ScheduledExecutorService#scheduleAtFixedRate 而不是 ScheduledExecutorService#scheduleWithFixedDelay

如果您以固定延迟进行调度,则上次执行完成的时间与下一次执行开始的时间之间必须经过 1 毫秒。因此,完成 1000 次迭代所需的挂钟时间至少为 1 秒加上一千次迭代的执行时间。

关于java - 预定执行者准确率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378905/

相关文章:

java - 如何等待(固定速率)ScheduledFuture 在取消时完成

java - 分割区域内的区域分割

java - Android 客户端应用程序(可能通过 USB 使用 ADB)

java - spf13 - 在具有非 java 扩展名的文件中使用 java 语法

java - ThreadPoolExecutor - ArrayBlockingQueue ... 在从队列中删除元素之前等待

java - Java.util包中Arrays的排序算法

java - ScheduledThreadPoolExecutor 的任务调度有多准确

Java 并发 : Run until terminated

Java:如何更新 Runnable lambda 中使用的变量?