ScheduledExecutorService无法正确触发

时间:2015-05-08 17:29:58

标签: java multithreading runnable scheduledexecutorservice

我试图在延迟后使用以下代码触发方法:

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

它应该等待延迟通过,触发" UpdateTDDBRejections"方法,在另一个Runnable类中,它将打印出一个短语,然后再睡眠然后再打印短语等等。

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

然而,当我这样设置时:

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类?

编辑:这是UpdateTDDBRejections类。

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

1 个答案:

答案 0 :(得分:5)

重复执行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);
                      // ^^^^^^^^^^^^^^^^^^^^^^^^^