我的应用程序Runnable
通过调用方法在 FX 线程上添加了多个,然后,我只想在 FX 平台队列中Platform.runlater
没有其他线程时才进行一些计算。Runnable
但是我不知道正确的方法,有没有什么事件或回调机制来获取正确的时间?
目前我强制应用程序线程随机休眠 MILLISECONDS。
问问题
1193 次
1 回答
4
这从一开始就是一个坏主意,因为您不知道其他代码使用什么Platform.runLater
。此外,您不应依赖此类实施细节;据你所知,队列永远不会是空的。
但是,您可以Runnable
使用自定义类发布这些 s,该类跟踪Runnable
s 的数量并在所有操作完成时通知您:
public class UpdateHandler {
private final AtomicInteger count;
private final Runnable completionHandler;
public UpdateHandler(Runnable completionHandler, Runnable... initialTasks) {
if (completionHandler == null || Stream.of(initialTasks).anyMatch(Objects::isNull)) {
throw new IllegalArgumentException();
}
count = new AtomicInteger(initialTasks.length);
this.completionHandler = completionHandler;
for (Runnable r : initialTasks) {
startTask(r);
}
}
private void startTask(Runnable runnable) {
Platform.runLater(() -> {
runnable.run();
if (count.decrementAndGet() == 0) {
completionHandler.run();
}
});
}
public void Runnable runLater(Runnable runnable) {
if (runnable == null) {
throw new IllegalArgumentException();
}
count.incrementAndGet();
startTask(runnable);
}
}
于 2016-09-23T09:41:30.577 回答