我试图在延迟后使用以下代码触发方法:
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()
{
}
}
答案 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);
// ^^^^^^^^^^^^^^^^^^^^^^^^^