2016-01-15 55 views
-1

我現在已經在處理1萬個數據,其在全球的HashMap,顯然不應該使用多thread.Today要求我已經嘗試了兩種schames:的Java多線程共享變量的全局地圖

1#除以巨大的hashMap對一些小的hashMap和一些線程進行處理(一個線程處理一個hashMap)。它具有很好的性能。顯然它不需要多線程之間的同步。我想使用多線程來處理相同和巨大的hashMap.I將從已處理的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); 
     } 
    } 
+0

爲什麼synchronized不能解決你的問題? –

+1

這看起來像是ConcurrentHashmap的作業。 @見https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html –

+2

當人們不理解線程時,我總是擔心「顯然應該使用多線程」。 – Kayaman

回答

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 
}); 

附註:stream requires Java8

+0

我的問題已解決,我會嘗試您的意見。謝謝。 –