这个方案是直接从我的一个类中提炼出来的,你给了我一个思路,我就实现一下;上课在这里。
根据您的问题,我打算做的是将ExecutorService
当前存在的 a 替换为 aScheduledExecutorService
并实施以下方法;请注意,@OnBackgroundThread
and@OnUiThread
是我使用的“只是”常规@Documented
注释:
public <T> void computeFixedDelay(
@OnBackgroundThread final Supplier<? extends T> supplier,
@OnUiThread final Consumer<? super T> consumer,
final long quantity, final TimeUnit unit)
{
backgroundExecutor.scheduleWithFixedDelay(() -> {
final T value = supplier.get();
frontendExecutor.execute(() -> consumer.accept(t));
}, 0L, quantity, unit);
}
随意复制任务并实施建议,然后添加此方法。然后,您将能够通过初始化此类的一个实例(Platform::runLater
作为第二个参数传递)在您的 JavaFX 客户端中执行此操作。
下面假设:
db::task
是什么从数据库中获取数据;
ui::update
获取该数据并更新 GUI。
然后你可以这样做:
taskRunner.computeFixedDelay(db::task, ui::update, 500L, TimeUnit.MILLISECONDS);