多线程Java多线程共享一个全局映射变量
现在我有一个要求,在一个全局hashMap中处理100万个数据,显然应该使用多线程。今天,我尝试了两种schames:
1 将庞大的hashMap划分为若干个小hashMap,并用若干线程进行处理(一个线程处理一个hashMap)。它的性能很好。显然,它不需要多线程之间的同步
2 我想使用多线程来处理相同且巨大的hashMap。我将从hashmap中删除已处理的项。我尝试了各种方法,但都失败了。我的关键点是:当我生成一个新线程时,我可以得到实时hashMap值,但是当所有线程都在运行时,所有线程不能相互通知最新的hashMap是什么已同步无法解决我的问题
在2 中,我如何解决这个问题。提前谢谢
以下是我的部分代码:
class DoJob implements Runnable{
private HugeDataHotelFormalMultiShare share = new HugeDataHotelFormalMultiShare();
DoJob(HugeDataHotelFormalMultiShare share){
this.share = share;
}
@Override
public void run() {
testHotelMatchCommonShare(share.origMap);
}
}
# 1 楼答案
如果您只想以多线程的方式逐步浏览giant HashMap,您可以使用并行流(它们正是为此目的制作的):
旁注:流需要Java8