在并行 Java 中运行函数

问题描述 投票:0回答:1

我试图在Java中并行运行两个函数,但我有一个特定的标准,我不知道它是否得到满足。下面是我的代码。执行器服务下面的代码在主函数中,上面只有一些其他代码,与问题无关,所以我决定减少代码以提高可读性。

private static final ExecutorService executorService = Executors.newFixedThreadPool(2);

            if (!weekly || rowData.get("M/W").equals("W")) {
            if (callData != null) {
                Future<?> bidPriceFuture = executorService.submit(() -> {
                    getBidPrice(rowData.get("Symbol"), callData, premiumC, percentMinC, "Call",
                            rowData.get("Call EPR").equals("#N/A") ? 0 : Double.parseDouble(rowData.get("Call EPR")), rowData);
                });

                Future<?> updateVerticalsFuture = executorService.submit(() -> {
                    updateVerticals(rowData.get("Symbol"), callData);
                });

                bidPriceFuture.get();
                updateVerticalsFuture.get();
            }
            if (putData != null) {
                System.out.println("Running the Put Stuff");
                Future<?> putFuture = executorService.submit(() -> {
                    getBidPrice(rowData.get("Symbol"), putData, premiumP, percentMinP, "Put",
                            rowData.get("Put EPR").equals("#N/A") ? 0 : Double.parseDouble(rowData.get("Put EPR")), rowData);
                });

                Future<?> updateVerticalPut = executorService.submit(() -> {
                    updateVerticals(rowData.get("Symbol"), putData);
                });

                putFuture.get();
                updateVerticalPut.get();
            }

总而言之,我想针对第一个 if 语句和第二个 if 语句并行运行 getBidPrice 和 updateVerticalsFuture。但是,由于 API 限制,我只想在第一个语句中的两个进程都完成后才启动第二个 if 语句的进程。我对此的第一个解决方案是将 .get() 添加到 Future 对象,但我认为这会停止实际的并行性,因为如果我调用 bidPriceFuture.get(),那么我不知道其他函数是否正在运行的背景。鉴于我所拥有的标准,我将不胜感激有关如何真正并行运行这两个功能的任何建议。

java multithreading parallel-processing executorservice completable-future
1个回答
0
投票

ExecutorService
Autocloseable

利用

ExecutorService
Autocloseable
这一事实。这意味着您可以使用 try-with-resources 语法在任务完成后自动关闭执行器服务。

© www.soinside.com 2019 - 2024. All rights reserved.