use ConcurrentHashMap#putIfAbsent instead of Map#putIfAbsent to be compatible with java 7