Skip to main content

How to Synchronize HashMap in Java with Example

How to Synchronize HashMap in Java with Example

HashMap is not synchronized, which means you cannot use it on multi-threaded Java program without external synchronization. In another word, if you share one instance of HashMap between multiple thread, each is either adding, removing or updating entries then it's possible that HashMap loss its structure and not behave as expected. If you have read my earlier articleabout HashMap, you know that during re-sizing its possible that HashMap exposed to multiple thread, may end up in infinite loop.  In order to avoid this, usually one HashMap instance is used by one thread, sharing of HashMap instance is not allowed, but if you have to share HashMap and there is no option to avoid that, you can always synchronize HashMap in Java. Ofcourse this will affect the performance and probably reduce the speed of HashMap as synchronized method is always slower than non-synchronized one. In this tutorial, we will learn how we can synchornize HashMap in Java.



Synchronizing HashMap in Java with Example

In this example we have a HashMap<Integer, String> it is having integer keys and String type values. In order to synchronize it we are usingCollections.synchronizedMap(hashmap)  it returns a thread-safe map backed up by the specified HashMap. In order to guarantee serial access, it is critical that all access to the backing map is accomplished through the returned map. It is also mandatory that the user manually synchronize on the returned map when iterating over any of its collection views:

   Map<Integer, String> synchronizedHashMaps = Collections.synchronizedMap(newHashMap<>());
      ...
  Set<Integer>  mySet = m.keySet();  // Needn't be in synchronized block
      ...
  synchronized(synchronizedHashMaps ) {  // Synchronizing on map instance, not set
      Iterator<Integer> i = mySet.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }

How to synchronize HashMap in Java
Failure to follow this advice may result in non-deterministic behavior. Also the returned map will beserializable if the specified map is serializable. Here is complete code example of how to synchronized HashMap in Java. You can run it on your favorite Java IDE or from command prompt as you wish, just make sure you store this class in HashMapSynchronizationDemo.java file.

import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * This Java program demonstrate, how to synchronize HashMap in Java. 
 * 
 * @author WINDOWS 8
 */

public class HashMapSynchronizationDemo{

    public static void main(String args[]) {
        
        // HashMap with mapping containing country and their currency
        Map<String, String> currencies = new HashMap<String, String>();
        
        currencies.put("USA", "USD");
        currencies.put("England", "GBP");
        currencies.put("Canada", "CAD");
        currencies.put("HongKong", "HKD");
        currencies.put("Australia", "AUD");
        
        // Synchronizing HashMap in Java
        currencies = Collections.synchronizedMap(currencies);
        
        // Make sure to synchronize Map while Iterating 
        // getting key set can be outside synchronized block
        Set<String> keySet = currencies.keySet();  
        
        
        // Synchronizing on HashMap, not on Set
        synchronized(currencies) {  
            Iterator<String> itr = keySet.iterator(); // Must be in synchronized block            
            while (itr.hasNext()){
                System.out.println(itr.next());
            }
        }
       
    }

}

Output
USA
Canada
HongKong
England
Australia

That's all about how do you synchronize HashMap in Java. Collections.synchronizedMap() is a useful method to achieve this but you also have better options available in Java. For example, if you know from start that your HashMap will be shared between multiple threads then why not useConcurrentHashMap, which is especially designed for such use. Unfortunately, if you have not yet on Java 1.5 then there is Hashtable which provides similar functionality like synchronized HashMap.

If you like this article and love to explore more in the world of HashMap, check out following;
  • Difference between Hashtable and ConcurrentHashMap in Java? (difference)
  • How get method of HashMap works in Java? (answer)
  • How to traverse HashMap in Java? (example)
  • How to sort HashMap based upon keys and values in Java? (solution)
  • What is difference between Hashtable and HashMap in Java? (answer)
  • Difference between HashSet and HashMap in Java? (answer)
  • What is difference between ArrayList and HashMap? (difference)
  • How HashSet internally works in Java? (answer)
  • How to convert Map to List in Java? (solution)
  • Difference between HashMap and LinkedHashMap in Java? (answer)

Comments

Popular posts from this blog

sxhkd volume andbrightness config for dwm on void

xbps-install  sxhkd ------------ mkdir .config/sxhkd cd .config/sxhkd nano/vim sxhkdrc -------------------------------- XF86AudioRaiseVolume         amixer -c 1 -- sset Master 2db+ XF86AudioLowerVolume         amixer -c 1 -- sset Master 2db- XF86AudioMute         amixer -c 1 -- sset Master toggle alt + shift + Escape         pkill -USR1 -x sxhkd XF86MonBrightnessUp          xbacklight -inc 20 XF86MonBrightnessDown          xbacklight -dec 20 ------------------------------------------------------------- amixer -c card_no -- sset Interface volume run alsamixer to find card no and interface names xbps-install -S git git clone https://git.suckless.org/dwm xbps-install -S base-devel libX11-devel libXft-devel libXinerama-devel  vim config.mk # FREETYPEINC = ${X11INC}/freetype2 #comment for non-bsd make clean install   cp config.def.h config.h vim config.h xbps-install -S font-symbola #for emoji on statusbar support     void audio config xbps-i

Hidden Wiki

Welcome to The Hidden Wiki New hidden wiki url 2015 http://zqktlwi4fecvo6ri.onion Add it to bookmarks and spread it!!! Editor's picks Bored? Pick a random page from the article index and replace one of these slots with it. The Matrix - Very nice to read. How to Exit the Matrix - Learn how to Protect yourself and your rights, online and off. Verifying PGP signatures - A short and simple how-to guide. In Praise Of Hawala - Anonymous informal value transfer system. Volunteer Here are five different things that you can help us out with. Plunder other hidden service lists for links and place them here! File the SnapBBSIndex links wherever they go. Set external links to HTTPS where available, good certificate, and same content. Care to start recording onionland's history? Check out Onionland's Museum Perform Dead Services Duties. Introduction Points Ahmia.fi - Clearnet search engine for Tor Hidden Services (allows you

download office 2021 and activate

get office from here  https://tb.rg-adguard.net/public.php open powershell as admin (win+x and a ) type cmd  goto insall dir 1.         cd /d %ProgramFiles(x86)%\Microsoft Office\Office16 2.           cd /d %ProgramFiles%\Microsoft Office\Office16 try 1 or 2 depending on installation  install volume license  for /f %x in ('dir /b ..\root\Licenses16\ProPlus2021VL_KMS*.xrm-ms') do cscript ospp.vbs /inslic:"..\root\Licenses16\%x" activate using kms cscript ospp.vbs /setprt:1688 cscript ospp.vbs /unpkey:6F7TH >nul cscript ospp.vbs /inpkey:FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH cscript ospp.vbs /sethst:s8.uk.to cscript ospp.vbs /act Automatic script (windefender may block it) ------------------------------------------------------------------------------------------------------------------- @echo off title Activate Microsoft Office 2021 (ALL versions) for FREE - MSGuides.com&cls&echo =====================================================================================&