private synchronized Simon createSimon(String name, Class<? extends AbstractSimon> simonClass) {
		AbstractSimon simon = allSimons.get(name);
		if (simon == null) {
			SimonUtils.validateSimonName(name);
			simon = newSimon(name, simonClass);
		} else if (simon instanceof UnknownSimon) {
			simon = replaceUnknownSimon(simon, simonClass);
		}
		callback.onSimonCreated(simon);
		return simon;
	}
private synchronized Simon createSimon ( String name , Class < ? extends AbstractSimon > simonClass ) { AbstractSimon simon = allSimons . get ( name ) ; if ( simon == null ) { SimonUtils . validateSimonName ( name ) ; simon = newSimon ( name , simonClass ) ; } else if ( simon instanceof UnknownSimon ) { simon = replaceUnknownSimon ( simon , simonClass ) ; } callback . onSimonCreated ( simon ) ; return simon ; }
Even with ConcurrentHashMap we want to synchronize here, so newly created Simons can be fully
set up with {@link Callback#onSimonCreated(Simon)}. ConcurrentHashMap still works fine for
listing Simons, etc.