NodeSubregistry getOrCreateSubregistry(final String key) { for (; ; ) { final Map<String, NodeSubregistry> snapshot = childrenUpdater.get(this); final NodeSubregistry subregistry = snapshot.get(key); if (subregistry != null) { return subregistry; } else { final NodeSubregistry newRegistry = new NodeSubregistry(key, this); final NodeSubregistry appearing = childrenUpdater.putAtomic(this, key, newRegistry, snapshot); if (appearing == null) { return newRegistry; } else if (appearing != newRegistry) { // someone else added one return appearing; } // otherwise, retry the loop because the map changed } } }