我有以下问题:我需要启动许多进程,并使其作为后台线程进行计算。如果一个进程完成了,我想更新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):为所需的所有进程创建任务/可运行对象,并将其馈送到池中。然后,该池将并行执行具有线程数量的任务,而其他任务则坐在队列中等待执行。

然后可以由任务本身触发对图表的更新。

10-01 01:48
查看更多