Refactor ClassLoaderScopeWekaMap
This commit is contained in:
parent
e3a6d40e77
commit
35b928be7c
|
@ -15,18 +15,22 @@ public class ClassLoaderScopedWeakMap {
|
||||||
* Gets the element registered at the specified key or register as new one retrieved by the
|
* Gets the element registered at the specified key or register as new one retrieved by the
|
||||||
* provided supplier.
|
* provided supplier.
|
||||||
*/
|
*/
|
||||||
public Object getOrCreate(ClassLoader classLoader, Object key, Supplier valueSupplier) {
|
public synchronized Object getOrCreate(
|
||||||
Map<Object, Object> classLoaderMap = map.get(classLoader);
|
ClassLoader classLoader, Object key, Supplier valueSupplier) {
|
||||||
if (classLoaderMap == null) {
|
Map<Object, Object> classLoaderMap;
|
||||||
|
|
||||||
|
if (!map.containsKey(classLoader)) {
|
||||||
classLoaderMap = new ConcurrentHashMap<>();
|
classLoaderMap = new ConcurrentHashMap<>();
|
||||||
map.put(classLoader, classLoaderMap);
|
map.put(classLoader, classLoaderMap);
|
||||||
|
} else {
|
||||||
|
classLoaderMap = map.get(classLoader);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (classLoaderMap.containsKey(key)) {
|
if (classLoaderMap.containsKey(key)) {
|
||||||
return classLoaderMap.get(key);
|
return classLoaderMap.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
Object value = valueSupplier.get();
|
final Object value = valueSupplier.get();
|
||||||
classLoaderMap.put(key, value);
|
classLoaderMap.put(key, value);
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue