并行化(Java 8)与并发(Java 7)

时间:2015-05-08 08:37:04

标签: java multithreading

我想解析多个文件以提取所需数据,然后将输出写入XML文件。我使用Callable Interface来实现这一点。我的同事让我使用Java 8功能轻松完成这项工作。我真的很困惑,我现在应该使用哪一个。

list.parallelStream().forEach(a -> {
            System.out.println(a);
        });

1 个答案:

答案 0 :(得分:4)

如果您要处理独立任务,则使用并发或并行流只会有所帮助。如果你不这样做的一个很好的例子就是锁定共享资源,例如

// makes no sense to use parallel here.
list.parallelStream().forEach(a -> {
        // locks System.out so only one thread at a time can do any work.
        System.out.println(a);
    });

但是,作为一般性问题,我会使用parallelStream来处理数据,而不是直接使用并发库,因为;

  • 编码的功能风格阻止了共享的可变状态。 (实际上,如何在函数式编程中不应该有一个可变状态,但Java并不是真正的函数式语言)
  • 处理数据更容易编写和理解。
  • 更容易测试是否使用并行帮助。很可能不会,你可以很容易地将它改回串行。

恕我直言,鉴于使用并行编码的可能性很低,parallelStream的最佳功能并不是添加的简单程度,而是取出它是多么简单。

如果您的临时工作很难建模为数据流,那么并发库会更好。例如使用ExecutorService实现客户端请求的工作池可能更简单。