Java多线程共享全局映射变量

时间:2016-01-15 10:18:53

标签: java multithreading

现在我要求在全局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);
        }
    }

1 个答案:

答案 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