Java tutorial
import java.util.Map; import java.util.Random; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static int MAP_SIZE = 100000; public static void main(String[] args) { Map<String, String> map = new ConcurrentHashMap<String, String>(); for (int i = 0; i < MAP_SIZE; i++) { map.put("key:" + i, UUID.randomUUID().toString()); } ExecutorService executor = Executors.newCachedThreadPool(); Accessor a1 = new Accessor(map); Accessor a2 = new Accessor(map); Mutator m = new Mutator(map); executor.execute(a1); executor.execute(m); executor.execute(a2); } } class Accessor implements Runnable { Map<String, String> map; public Accessor(Map<String, String> map) { this.map = map; } @Override public void run() { for (Map.Entry<String, String> entry : this.map.entrySet()) { System.out.println( Thread.currentThread().getName() + " - [" + entry.getKey() + ", " + entry.getValue() + ']'); } } } class Mutator implements Runnable { Map<String, String> map; Random random = new Random(); public Mutator(Map<String, String> map) { this.map = map; } @Override public void run() { for (int i = 0; i < 100; i++) { this.map.remove("key" + random.nextInt(Main.MAP_SIZE)); this.map.put("key" + random.nextInt(Main.MAP_SIZE), UUID.randomUUID().toString()); System.out.println(Thread.currentThread().getName() + ": " + i); } } }