1.) Writing to a ConcurrentHashMap locks only a portion of the map;
2.) Reads can generally occur without locking.
HOWEVER, that doesn't mean you can just replace all of your HashMap variables with ConcurrentHashMap variables and your code will run
flawlessly. You need, at a minimum, to replace all the "puts" with putIfAbsent.
HIGHLY recommend Java Concurrency In Practice by Brian Goetz (and others).