【发布时间】:2015-04-20 18:23:16
【问题描述】:
我有一个ConcurrentMap,我将ArrayList 中的元素放到映射中,以供其他线程处理。一旦线程完成其处理,它会将结果添加到ConcurrentMap 中并调用一个方法,以便让我们说“主”线程获取并处理所有结果(来自ConcurrentMap 和ArrayList)。
这种方法有效,但结果是调用该方法的次数与列表中元素的数量一样多。
问题:我可以使用什么构造以便在ConcurrentMap 完全由所有后台线程的结果填充?
【问题讨论】:
-
你不能在其他线程上调用 join() 吗?
-
@KevinWorkman:线程是由我无法控制的其他构造产生的。基本上它们被封装在其他对象中,我只能为一项任务启动一个。我无权访问/启动任何线程
-
你知道有多少对象最终会出现在 ConcurrentMap 中吗?你知道什么时候添加了一个项目吗?如果您发布了MCVE,这将更容易谈论 - 处理可以只是对 Thread.sleep() 或其他东西的调用。
-
@KevinWorkman:如果
ArrayList有 N 个元素,则该元素将出现在地图中
标签: java multithreading data-structures concurrency concurrenthashmap