当前位置: 首页 > 知识库问答 >
问题:

带地图的ParallelStream

陆雅志
2023-03-14

我想从复杂映射中读取值,并并行执行一个函数。为此,我使用了Java 8中的ForkJoinPool。

我在这里面临的问题是,对于少数值,函数执行两次。起初我认为,Hashmap不是线程安全的,所以我尝试使用HashTable,但它是相同的。。。

final Map<CakeOrder, List<CakeOrderDetails>> cakeOrderMap = cakeUpdatesQueueItemDao.getCakeOrdersByStatus(EItemStatus.OPENED, country.getDbTableSuffix(), true);
final Map<CakeOrder, List<CakeOrderDetails>> cakeOrderTableMap = new Hashtable<>();

cakeOrderMap.forEach((k, v) -> cakeOrderTableMap.put(k, v));

final ForkJoinPool pool = new ForkJoinPool(20);
pool.submit(() -> cakeOrderTableMap.entrySet()
   .stream()
   .parallel()
   .forEach(entry -> cakeService.updateCakeOrderStatusAndPrice(entry.getKey(), entry.getValue()))).invoke();

共有1个答案

车子平
2023-03-14

对于并行流,输入集合的线程安全性是不必要的,只要它没有更新。另一方面,哈希表。entrySet()对于并行流来说是一个非常糟糕的源代码,因为哈希表没有自定义的拆分器实现。使用HashMap更好。然而,提供的代码一切都应该正常工作,无论是使用哈希映射还是哈希表(尽管使用哈希表效率要低得多)。我怀疑问题在cakeService中没有显示。updateCakeOrderStatusAndPrice,这可能不是线程安全的。

 类似资料:
  • 问题内容: 我想做一个需要集成Google MapsAPI的项目。我需要自动完成,本地化并在地图上绘制路线。我该如何用angular做到这一点,您可以为此推荐一个库吗?或者我该如何使用javascript的GoogleMapsAPI做到这一点。该项目是使用yeoman-fullstack生成的。 谢谢。 问题答案: 首先,如果您想让 AngularJS使用* Google Maps API ,则有

  • 问题内容: 两者之间到底有什么区别 和 第一个只是加快字段初始化速度的捷径吗?有性能方面的考虑吗? 问题答案: 第二种形式总是创建一个空的地图。 第一种形式是地图文字的特殊情况。地图文字允许创建 非空 地图: 现在,您的(通用)示例: 是没有初始值(键/值对)的地图文字。它完全等同于: 此外,这是为地图指定初始容量(大于初始分配的元素数量)的唯一方法。例: 将创建一个地图,该地图具有足够的空间来容

  • 我们有学生的地图记录

  • 我尝试将Mapbox与SwiftUI结合使用。 我https://stackoverflow.com/a/56551675/5653544应用了这个答案,也遵循了mapbox教程。 所以我有一个MapView.swift视图: 我的ContentView.swift调用MapView: 我还创建了一个~/。带有mapbox令牌的mapbox文件,该令牌由我的mapbox帐户获取。但我有一张空白地图

  • google开发人员文档中的描述是: 公共静态CameraUpdate newLatLngBounds(LatLngBounds bounds,int padding)(...).返回的CameraUpdate的方位为0,倾斜度为0。(...)“。 如何更改轴承值?

  • 我有一个图像,我想覆盖在地图上的特定位置,看起来像当前静态地图图像服务没有提供任何参数传递。