ConcurrentHashMap

java.util.concurrent.ConcurrentHashMap is a part of the Java Concurrency package and is designed for highly concurrent applications. It is an advanced version of HashMap that allows safe access and modification by multiple threads without the need for external synchronization.

Let’s consider a ConcurrentHashMap<String, Integer> that stores the marks of 5 students:

  • Paani, Mahesh, Datta, Ganesh, and Harsha.

We’ll use threads to update and read from this map concurrently.

import java.util.concurrent.ConcurrentHashMap;

public class StudentMarksExample {

    public static void main(String[] args) {

        // Create ConcurrentHashMap
        ConcurrentHashMap<String, Integer> studentMarks = new ConcurrentHashMap<>();

        // Add 5 students
        studentMarks.put("Paani", 85);
        studentMarks.put("Mahesh", 90);
        studentMarks.put("Datta", 88);
        studentMarks.put("Ganesh", 76);
        studentMarks.put("Harsha", 92);

        // Thread to update marks
        Thread updater = new Thread(() -> {
            System.out.println("Updater Thread started");
            studentMarks.compute("Mahesh", (key, val) -> val + 5);
            studentMarks.compute("Datta", (key, val) -> val - 2);
            studentMarks.put("Ganesh", 80); // Overwrite value
            System.out.println("Updater Thread finished");
        });

        // Thread to read marks
        Thread reader = new Thread(() -> {
            System.out.println("Reader Thread started");
            studentMarks.forEach((name, marks) -> {
                System.out.println(name + " scored: " + marks);
            });
            System.out.println("Reader Thread finished");
        });

        // Start both threads
        updater.start();
        reader.start();

        // Wait for threads to finish
        try {
            updater.join();
            reader.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // Final output
        System.out.println("\n Final Marks:");
        studentMarks.forEach((name, marks) -> {
            System.out.println(name + " -> " + marks);
        });
    }
}
/*
D:\>javac StudentMarksExample.java

D:\>java StudentMarksExample
Reader Thread started
Updater Thread started
Updater Thread finished
Ganesh scored: 76
Datta scored: 86
Mahesh scored: 95
Harsha scored: 92
Paani scored: 85
Reader Thread finished

 Final Marks:
Ganesh -> 80
Datta -> 86
Mahesh -> 95
Harsha -> 92
Paani -> 85
*/
Scroll to Top