// Concurrent canonicalizing map atop ConcurrentMap - Pages 273-274 package org.effectivejava.examples.chapter10.item69; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class Intern { private static final ConcurrentMap<String, String> map = new ConcurrentHashMap<String, String>(); // Concurrent canonicalizing map atop ConcurrentMap - not optimal - Page 273 // public static String intern(String s) { // String previousValue = map.putIfAbsent(s, s); // return previousValue == null ? s : previousValue; // } // Concurrent canonicalizing map atop ConcurrentMap - faster! - Page 274 public static String intern(String s) { String result = map.get(s); if (result == null) { result = map.putIfAbsent(s, s); if (result == null) result = s; } return result; } }