1

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 2013 年 3 月 13 日 14:43:54.477 2000 2013 年 3 月 13 日 14:44:10.296 3000 2013 年 3 月 13 日 14:44:26.381 4000 2013 年 3 月 13 日 14:44:42.621 5000 2013 年 3 月 13 日14:44:55.907 6000 2013 年 3 月 13 日 14:44:58.516 7000 2013 年 3 月 13 日 14:45:05.896 8000 2013 年 3 月 13 日 14:45:10.292 9000 2013 年 3 月 13 日 14:45:15.1209 1 2013 年 3 月 13 日 14:45:18.187

ありがとう、アビナフ

4

1 に答える 1

1

ScheduledExecutorService#scheduleAtFixedRateではなく使用したいScheduledExecutorService#scheduleWithFixedDelay

固定遅延でスケジュールする場合、最後の実行が完了してから次の実行が開始されるまでに1ミリ秒が経過する必要があります。したがって、1000回の反復を完了するのにかかる実時間は、少なくとも1秒に1000回の反復の実行時間を加えたものになります。

于 2013-03-13T07:15:20.203 に答える