现在我要求在全局hashMap中处理100万个数据,显然应该使用多线程。今天我尝试了两个schames:
1#将巨大的hashMap划分为多个小hashMap并由多个线程处理(一个线程处理一个hashMap)。它具有良好的性能。显然它不是需要多线程之间的同步。
2#我想使用多线程来处理相同和巨大的hashMap.I将从已经处理的hashmap中删除项目。我尝试了各种方法但是失败了。我的关键点是:当我生成一个新线程时,我可以获得实时hashMap值,但是当所有线程都在运行时,所有线程都不能相互通知什么是最新的hashMap。 synchronized 可以&#t; t解决我的问题。
在 2#中,我该如何解决这个问题。谢谢你。
以下是我的代码的一部分:
class DoJob implements Runnable{
private HugeDataHotelFormalMultiShare share = new HugeDataHotelFormalMultiShare();
DoJob(HugeDataHotelFormalMultiShare share){
this.share = share;
}
@Override
public void run() {
testHotelMatchCommonShare(share.origMap);
}
}
答案 0 :(得分:0)
如果您只想以多线程方式单步执行巨型HashMap,您可以使用并行流(它们完全是为此目的而制作的):
HashMap<Object, Object> giantMap=new HashMap<>();
giantMap.entrySet().parallelStream().forEach((entry)->{
Object key=entry.getKey();
Object value=entry.getValue();
//your logic with it
});
旁注:流需要Java8