Concurrency issues of atomicCreateIfAbsent function

This change expands the coverage of synchronized protection before caller get the key in concurrent hash map in atomicCreateIfAbsent function. If there are more than two concurrent calls to this function with same key and value, this function calls the parameter function with key which can cause side effects and it is not really atomic creation.
Therefore, we need to expand the synchronized protection.