java - 并行化 (Java 8) 与并发性 (Java 7)

标签 java multithreading

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

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

最佳答案

仅当您有独立的任务需要处理时,使用并发或并行流才有帮助。不这样做的一个很好的例子就是锁定共享资源,例如

// 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);
    });

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

  • 函数式编码风格不鼓励共享可变状态。 (实际上,函数式编程中不应该有可变状态,但 Java 并不是真正的函数式语言)
  • 处理数据更容易编写和理解。
  • 更容易测试使用并行是否有帮助。很可能不会,您可以轻松地将其更改回串行。

恕我直言,鉴于使用并行编码真正有帮助的机会很低,parallelStream 的最佳功能不在于添加有多简单,而在于删除有多简单。

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

关于java - 并行化 (Java 8) 与并发性 (Java 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30119366/

相关文章:

java - Spring Kafka- 试图了解事物在幕后是如何工作的

java - 在 Java 中实现 SIFT

java - 对方法的多个参数进行 null 检查的优雅或惯用的方式

ios - 如何在 Objective-C 中的特定时间后停止执行方法?

java - 为什么我的线程排序算法比非线程版本慢?

java - 为什么 hibernate 主线程会改变 Java 中正在运行的其他线程的行为?

c++ - 如果只有一个线程停止,ptrace 是否可以从多线程进程读取/写入数据?

java - 在 eclipse 中运行插件应用程序

java - Java将两个数组中的每个int元素相乘为字符串元素

c++ - QThread:从不同线程修改变量的安全方法?