У меня есть приложение, целью которого является симуляция гонки N гонщиков (темы). Запуск этого приложения на моем рабочем столе с Win10 работает отлично, однако на моем ноутбуке с Ubuntu 18.04 приложение значительно отстает.
Я не уверен в причине этой ситуации, но я думаю, что это может быть что-то не так с моим кодом. Каждый отдельный поток вызывается службой Executor в контроллере, а потоки представляются в пользовательском интерфейсе с помощью ProgressBars. Я прочитал много тем с такими же проблемами здесь, и я изменил свой метод 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;
}
Я надеюсь, что кто-нибудь сможет объяснить мне, где я ошибаюсь или в чем причина этих ужасных лагов?
EDIT:
Методы, где я запускаю темы:
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());
}
}