Java中的隐式和显式并行性

时间:2016-01-14 18:05:13

标签: java multithreading concurrency parallel-processing

一直在研究Java语言中的隐式和显式并发,经过一些研究后想要澄清一些事情。

  • Java语言中的隐式并行是仅通过使用Java 8流实现的吗?
  • 我认为Java中的显式并行是通过使用程序员编写的线程来实现的。 (不同之处在于隐式并行应该通过编译器发生,而不是程序员编写代码)?

由于

1 个答案:

答案 0 :(得分:2)

隐式并行性指的是编译器在没有"任何"的情况下并行执行某些操作的能力。来自程序员的暗示。如果要执行的计算具有某些属性(例如,并行作业之间没有数据依赖性),则可以实现这一点。

Java流(引用Oracle的文档)支持顺序和并行聚合操作的一系列元素,并且与集合根本不同,因为

1)集合旨在快速访问和操作集合的元素

2) Stream 不是要修改,而是在源元素和结果元素之间创建一种管道。结果元素是通过对源进行的操作(通常以函数/ lambda样式描述)创建的。这种计算可以安全地划分为子管道并以并行方式处理。

组成此管道的功能必须具有以下属性: 1)必须是非干扰的(它们不会修改流源); 2)无状态(它们的结果不应该依赖于在执行流管道期间可能改变的任何状态)。 see here

明确的并行性(顾名思义)是由程序员实现的,它可以根据需要生成尽可能多的(计算元素)。这些元素通常是线程或进程(see here for the difference这些计算元素同时执行并且是由程序员协调所有操作以产生正确的结果(例如,显式同步线程,交换消息,进行事务操作等)。