首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行化(Java 8)与并发(Java 7)

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

Stack Overflow用户
提问于 2015-05-08 08:37:03
回答 1查看 1K关注 0票数 2

我希望解析多个文件以提取所需的数据,然后将输出写入XML文件。我已经使用Callable Interface实现了这一点。我的同事让我使用Java 8特性,它可以轻松地完成这项工作。我真搞不懂我现在该用哪一种。

代码语言:javascript
复制
list.parallelStream().forEach(a -> {
            System.out.println(a);
        });
EN

回答 1

Stack Overflow用户

发布于 2015-05-08 09:21:51

只有当您有独立的任务要处理时,才能使用并发或并行流。当您不这样做的时候,一个很好的例子是您锁定在共享资源上的内容。

代码语言:javascript
复制
// 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实现客户端请求的工作池可能更简单。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30119366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档