Java中的隐式和显式并行

一直在研究
Java语言中的隐式和显式并发,经过一些研究后想要清除一些内容.

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

谢谢

最佳答案 隐式并行性是指编译器并行执行某些操作而没有程序员“任何”提示的能力.如果要执行的计算具有某些属性(例如,并行作业之间没有数据依赖性),则可以实现这一点.

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

1)集合被设计为快速访问和操纵集合的元素

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

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

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

点赞