假设我有个队列List<String>, 里面有10W条数据,我需要对里面的每条数据进行处理, 假设开10个线程,最终处理完成后,再把处理完成后结果进行合并组成一个新的List<Long>, 该怎么写呢?
假设我有个队列List<String>, 里面有10W条数据,我需要对里面的每条数据进行处理, 假设开10个线程,最终处理完成后,再把处理完成后结果进行合并组成一个新的List<Long>, 该怎么写呢?
可以考虑用parallelStream,比如把list中的每个都加1:
list.parallelStream().map(e->e+1).collect(Collectors.toList());
8 回答6.6k 阅读
4 回答714 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答974 阅读✓ 已解决
提供个思路:
首先准备一个线程安全的集合,例如
ConcurrentLinkedList<Long> resultList = ...
第一个线程处理
list.subList(0, 10000)
,返回一个List<Long>
,并塞入resultList
;第二个线程处理
list.subList(10000, 20000)
,返回一个List<Long>
,并塞入resultList
;...
把上面这10个线程同时
start
了并join
;10个
join
都退出后,得到的resultList
就是你想要的。如果
resultList
的顺序也有讲究,那么稍微改造一下就行了,比如用CopyOnWriteArrayList
。