Browse Source

Use (Concurrent)Map.computeIfAbsent for lazy nested collection creation

pull/1737/merge
Juergen Hoeller 7 years ago
parent
commit
f00afe3247
  1. 9
      spring-core/src/main/java/org/springframework/util/xml/SimpleNamespaceContext.java
  2. 13
      spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java
  3. 8
      spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java
  4. 11
      spring-messaging/src/main/java/org/springframework/messaging/support/NativeMessageHeaderAccessor.java
  5. 8
      spring-test/src/main/java/org/springframework/test/context/cache/DefaultContextCache.java

9
spring-core/src/main/java/org/springframework/util/xml/SimpleNamespaceContext.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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);
}
}

13
spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java

@ -26,6 +26,8 @@ import java.util.Iterator; @@ -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 { @@ -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 { @@ -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()) {

8
spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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);
}
}

11
spring-messaging/src/main/java/org/springframework/messaging/support/NativeMessageHeaderAccessor.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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 { @@ -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

8
spring-test/src/main/java/org/springframework/test/context/cache/DefaultContextCache.java vendored

@ -1,5 +1,5 @@ @@ -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 { @@ -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();

Loading…
Cancel
Save