gpt4 book ai didi

JavaFX 应用程序在使用多线程时出现滞后

转载 作者:太空宇宙 更新时间:2023-11-04 09:55:10 24 4
gpt4 key购买 nike

我有一个应用程序,其目的是模拟 N 个赛车手(线程)的比赛。在我的 Win10 桌面上运行这个应用程序运行得很好,但是在我的带有 Ubuntu 18.04 应用程序的笔记本上运行则严重滞后。

我不确定造成这种情况的原因,但我想这可能是我的代码有问题。每个线程都由 Controller 中的 Executor Service 调用,并且线程在 UI 中由 ProgressBar 表示。我在这里阅读了很多具有相同问题的主题,并且更改了我的 Call() 方法。也就是说,我已经实现了 Platform.runLater() 来更新我的 ProgressBars,但不幸的是它没有改变任何东西。

public Boolean call() {
try {
for (double i = 0; i < getRaceTime(); i += 0.01) {
final double counter = i;
final double range = getRaceTime();

Platform.runLater(() -> progressBar.setProgress(counter / range));

TimeUnit.MILLISECONDS.sleep(1);

}
} catch (InterruptedException e) {
e.printStackTrace();
}

return true;
}

我希望有人能解释我哪里错了或者这种可怕的滞后的原因是什么?

编辑:我启动线程的方法:

public void startButtonClicked() {
for (RallyRacer r : rallyRacers) {
futures.add(executorService.submit(r));
}
new Thread(task).start();

executorService.shutdown();
}

public void initialize(URL location, ResourceBundle resources) {
this.executorService = Executors.newFixedThreadPool(15);
this.futures = new ArrayList<>();
this.rallyRacers = new ArrayList<>();
for(int i = 0; i < 15; i++) {
rallyRacers.add(new RallyRacer());
}
}

最佳答案

如果主要是在用户界面上跟踪/显示赛车手的进度,我建议考虑更长的 sleep 时间:

  1. 人眼无法识别 1 毫秒速度的视觉变化。此时,我每秒会进行多次更改,这类似于电影的通常帧速率。为了获得高视觉性能,每秒至少 20 帧(即更新或新图像),最多可达 50 或 60 帧。

  2. JavaFX 使用它自己的“帧速率”。 JavaFX 框架每秒更新 UI 状态约 60 次 - 不多。因此,每秒更新进度条 1000 次简直是大材小用。

也许您想尝试 10 或 20 毫秒甚至更长的 sleep 时间。我猜想,应用程序的整体性能会提高。

关于JavaFX 应用程序在使用多线程时出现滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54238491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com