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);
// ^^^^^^^^^^^^^^^^^^^^^^^^^
我正在尝试使用以下代码在延迟后触发一个方法:
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);
// ^^^^^^^^^^^^^^^^^^^^^^^^^