有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程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) 个答案

  1. # 1 楼答案

    如果您只想以多线程的方式逐步浏览giant 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