代码之家  ›  专栏  ›  技术社区  ›  sharon gur

java 8并行流,是否可能阻塞代码?

  •  4
  • sharon gur  · 技术社区  · 8 年前

    我有一个列表,我想对每个项目异步执行逻辑。

    当所有线程都完成后,我想调用一个紧密连接。

    像这样:

    bucketsList.parallelStream().forEach(t -> {
    //some logic
    });
     try {
     RestApi.getInstance().closeClientConnection();
     } catch (IOException e) {
         e.printStackTrace();
     }
    

    编辑: 我不能使用 CountDownLatch

    1 回复  |  直到 8 年前
        1
  •  12
  •   Aaron    8 年前

    在上的操作 ParallelStream 仍在阻塞,将等待生成的所有线程完成。这些线程是异步执行的(它们不等待前一个线程完成),但这并不意味着整个代码开始异步运行!

    CompletableFuture<T> 在你的 forEach reduce 可完成的未来<T> .中间操作可以是 peek map 有副作用(两者都不被看好,但我不知道有什么最佳解决方案)。解决单个结果后,您将关闭连接 .

    closeClientConnection() 并行流 已处理。