ScheduledExecutorService 未正确触发

ScheduledExecutorService not triggering correctly

我正在尝试使用以下代码在延迟后触发一个方法:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new UpdateTDDBRejections(), 5, 10, TimeUnit.SECONDS);

应该是等待延迟过去,触发"UpdateTDDBRejections"方法,这个方法在另一个,Runnable,class,会打印出一个phrase然后sleep再打印phrase再次,等等,等等

它不会这样做,它只是打印短语然后停止。

然而,当我这样设置时:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() 
{
      @Override
      public void run() {
        // do stuff
           System.out.println("garbage garbage garbage");
      }
    }, 5, 10, TimeUnit.SECONDS);

它按照人们对 ScheduledExecutorService 的期望运行。我的印象是,因为我使用的是 Java 8.4,所以我不必添加 TimerTask 来按照我想要的方式制作此坐标。有什么建议么?还是我根本无法使用 ScheduledExecutorService 调用其他 Runnable classes?

编辑:这是 UpdateTDDBRejections class。

public class UpdateTDDBRejections implements Runnable
{
   UpdateTDDBRejections()
   {
       System.out.println("garbage garbage garbage");
   }
   @Override
   public void run()
   {
   }
}

是重复执行的run方法。尝试以下操作:

public class UpdateTDDBRejections implements Runnable
{
   @Override
   public void run()
   {
       System.out.println("garbage garbage garbage");
   }
}

请注意,由于您使用的是 Java 8,因此您可以

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(() -> System.out.println("garbage garbage garbage"),
                         5, 10, TimeUnit.SECONDS);

如果你想让构造函数运行(这可能是你用 new UpdateTDDBRejections() 尝试过的,你需要做的是:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(UpdateTDDBRejections::new, 5, 10, TimeUnit.SECONDS);
                      // ^^^^^^^^^^^^^^^^^^^^^^^^^