我有以下问题:我需要启动许多进程,并使其作为后台线程进行计算。如果一个进程完成了,我想更新BubbleChart。我启动了一个for循环,该循环创建了一个新线程,然后启动了我的进程。我的问题是我似乎无法停止或暂停循环,因为我可以一次启动一个进程或每个进程(这对我的系统来说很难处理)
这是我的一些代码
for (int i = 0; i < getAllVariantsCount(); i++ ) {
CalculatingFaRAO calculatingFaRAO = new CalculatingFaRAO(
choiceBoxSelectShip.getValue(),
tempPathFolder,
coreConfiguredFilesArray.get(i),
waterwayNamesArray.get(i),
getAllVariantsCount(),
i);
Thread calculatingFaRAOThread = new Thread(calculatingFaRAO);
calculatingFaRAOThread.start();
calculatingFaRAO.setOnFailed(value -> {
showErrorMessage(calculatingFaRAO.getException());
});
calculatingFaRAO.setOnSucceeded(event -> {});
progressBar.progressProperty().bind(calculatingFaRAO.progressProperty());
cancelButton.setOnAction(event -> {
calculatingFaRAO.cancel(true);
primaryStage.setMinHeight(415);
primaryStage.setMinWidth(500);
primaryStage.centerOnScreen();
start(primaryStage);
});
stopButton.setOnAction(event -> {
calculatingFaRAO.cancel(true);
});
}
在我的CalculatingFaRAO类中,我只是将参数传递给ProcessBuilder
我希望有人可以帮助我解决这个问题。我不必坚持这种代码设计,这只是我唯一的解决方案。
只是问您是否需要知道其他任何事情。
最佳答案
我不太确定我了解您的要求/问题,但是我会尽力的,所以让我改一下:
您希望同时运行多个(独立的?)进程,但希望将该数目限制为合理的数量。当一个过程完成时,您想更新图表并启动另一个过程(如果还有一个)。
如果是这样,那么您可以考虑使用线程池(例如ThreadPoolExecutor
):为所需的所有进程创建任务/可运行对象,并将其馈送到池中。然后,该池将并行执行具有线程数量的任务,而其他任务则坐在队列中等待执行。
然后可以由任务本身触发对图表的更新。