Use (Concurrent)Map.computeIfAbsent for lazy nested collection creation
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -123,11 +123,8 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
}
|
||||
else {
|
||||
this.prefixToNamespaceUri.put(prefix, namespaceUri);
|
||||
Set<String> prefixes = this.namespaceUriToPrefixes.get(namespaceUri);
|
||||
if (prefixes == null) {
|
||||
prefixes = new LinkedHashSet<>();
|
||||
this.namespaceUriToPrefixes.put(namespaceUri, prefixes);
|
||||
}
|
||||
Set<String> prefixes =
|
||||
this.namespaceUriToPrefixes.computeIfAbsent(namespaceUri, k -> new LinkedHashSet<>());
|
||||
prefixes.add(prefix);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import javax.jms.Connection;
|
||||
import javax.jms.ConnectionFactory;
|
||||
import javax.jms.Destination;
|
||||
@@ -86,7 +88,7 @@ public class CachingConnectionFactory extends SingleConnectionFactory {
|
||||
|
||||
private volatile boolean active = true;
|
||||
|
||||
private final Map<Integer, LinkedList<Session>> cachedSessions = new HashMap<>();
|
||||
private final ConcurrentMap<Integer, LinkedList<Session>> cachedSessions = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
/**
|
||||
@@ -208,14 +210,7 @@ public class CachingConnectionFactory extends SingleConnectionFactory {
|
||||
return null;
|
||||
}
|
||||
|
||||
LinkedList<Session> sessionList;
|
||||
synchronized (this.cachedSessions) {
|
||||
sessionList = this.cachedSessions.get(mode);
|
||||
if (sessionList == null) {
|
||||
sessionList = new LinkedList<>();
|
||||
this.cachedSessions.put(mode, sessionList);
|
||||
}
|
||||
}
|
||||
LinkedList<Session> sessionList = this.cachedSessions.computeIfAbsent(mode, k -> new LinkedList<>());
|
||||
Session session = null;
|
||||
synchronized (sessionList) {
|
||||
if (!sessionList.isEmpty()) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -139,11 +139,7 @@ public class JmsResourceHolder extends ResourceHolderSupport {
|
||||
if (!this.sessions.contains(session)) {
|
||||
this.sessions.add(session);
|
||||
if (connection != null) {
|
||||
List<Session> sessions = this.sessionsPerConnection.get(connection);
|
||||
if (sessions == null) {
|
||||
sessions = new LinkedList<>();
|
||||
this.sessionsPerConnection.put(connection, sessions);
|
||||
}
|
||||
List<Session> sessions = this.sessionsPerConnection.computeIfAbsent(connection, k -> new LinkedList<>());
|
||||
sessions.add(session);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -184,11 +184,7 @@ public class NativeMessageHeaderAccessor extends MessageHeaderAccessor {
|
||||
nativeHeaders = new LinkedMultiValueMap<>(4);
|
||||
setHeader(NATIVE_HEADERS, nativeHeaders);
|
||||
}
|
||||
List<String> values = nativeHeaders.get(name);
|
||||
if (values == null) {
|
||||
values = new LinkedList<>();
|
||||
nativeHeaders.put(name, values);
|
||||
}
|
||||
List<String> values = nativeHeaders.computeIfAbsent(name, k -> new LinkedList<>());
|
||||
values.add(value);
|
||||
setModified(true);
|
||||
}
|
||||
@@ -197,8 +193,7 @@ public class NativeMessageHeaderAccessor extends MessageHeaderAccessor {
|
||||
if (headers == null) {
|
||||
return;
|
||||
}
|
||||
headers.forEach((key, values) ->
|
||||
values.forEach(value -> addNativeHeader(key, value)));
|
||||
headers.forEach((key, values) -> values.forEach(value -> addNativeHeader(key, value)));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -143,11 +143,7 @@ public class DefaultContextCache implements ContextCache {
|
||||
MergedContextConfiguration child = key;
|
||||
MergedContextConfiguration parent = child.getParent();
|
||||
while (parent != null) {
|
||||
Set<MergedContextConfiguration> list = this.hierarchyMap.get(parent);
|
||||
if (list == null) {
|
||||
list = new HashSet<>();
|
||||
this.hierarchyMap.put(parent, list);
|
||||
}
|
||||
Set<MergedContextConfiguration> list = this.hierarchyMap.computeIfAbsent(parent, k -> new HashSet<>());
|
||||
list.add(child);
|
||||
child = parent;
|
||||
parent = child.getParent();
|
||||
|
||||
Reference in New Issue
Block a user