Java中的并发性和并行性之间有区别吗?
2022-09-01 06:50:02
我一直在Google中做一些研究,并且无法完全了解Java中并发和并行程序之间的差异(如果有的话)。我看过的一些信息表明两者之间没有区别。是这样吗??
我一直在Google中做一些研究,并且无法完全了解Java中并发和并行程序之间的差异(如果有的话)。我看过的一些信息表明两者之间没有区别。是这样吗??
这取决于谁在定义它。创建Go编程语言的人如果将代码 Concurrent 分解为可以并行处理的片段,则调用 Concurrent 代码,而 Parallelism 意味着这些片段实际上是同时运行的。
由于这些是编程原则,因此编程语言与如何定义它们无关。但是,Java 8将具有更多功能,可以同时实现并发性和并行性,而不会过多地弄乱代码。例如,像这样的代码:
List<Integer> coolItemIds = new List<Integer>();
for(Item item : getItems())
{
if(item.isCool())
{
int itemId = item.getId();
coolItemIds.add(item);
}
}
...这是非并发和非并行的,可以这样写(我的语法可能是错误的,但希望你明白这个想法):
Iterable<Item> items = getItems();
Iterable<Item> coolItems = items.filter(item -> item.isCool());
Iterable<Integer> coolItemIds = coolItems.map(item -> item.getId());
上面的代码是以并发方式编写的:给定的代码都不需要一次过滤一个 coolItems,或者一次只能调用一个项目,甚至不需要在列表开头的项目之前过滤或映射列表开头的项目。根据从 返回的类型,给定的操作可能会或可能不会并行运行,但您编写的代码是并发的。getId()
Iterable
getItems()
还感兴趣:
我想这取决于你的定义,但我的理解大致是这样的:
据我所知,这两个术语都不是特定于Java的,或者具有任何特定于Java的细微差别。