summaryrefslogtreecommitdiffstats
path: root/jrt
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2019-05-13 13:53:38 +0000
committerHåvard Pettersen <havardpe@oath.com>2019-05-13 13:53:38 +0000
commit176abec811a2f93442a95a4dc23196abe33a3bc9 (patch)
tree63ada2e581265e02cdda8b4a65a6af4452f97ae0 /jrt
parent670410fec9e06686f49ee2e6c7b304f52f340cd9 (diff)
use AtomicReference (with weaker constraints; requires Java 9)
Diffstat (limited to 'jrt')
-rw-r--r--jrt/src/com/yahoo/jrt/Supervisor.java20
1 files changed, 10 insertions, 10 deletions
diff --git a/jrt/src/com/yahoo/jrt/Supervisor.java b/jrt/src/com/yahoo/jrt/Supervisor.java
index 14af463d84e..09360c2da7b 100644
--- a/jrt/src/com/yahoo/jrt/Supervisor.java
+++ b/jrt/src/com/yahoo/jrt/Supervisor.java
@@ -3,7 +3,7 @@ package com.yahoo.jrt;
import java.util.HashMap;
-
+import java.util.concurrent.atomic.AtomicReference;
/**
* A Supervisor keeps a method repository and handles dispatching of
@@ -16,10 +16,10 @@ import java.util.HashMap;
**/
public class Supervisor {
- private Transport transport;
+ private final Transport transport;
private SessionHandler sessionHandler = null;
private final Object methodMapLock = new Object();
- private volatile HashMap<String, Method> methodMap = new HashMap<>();
+ private final AtomicReference<HashMap<String, Method>> methodMap = new AtomicReference<>(new HashMap<>());
private int maxInputBufferSize = 0;
private int maxOutputBufferSize = 0;
@@ -68,7 +68,7 @@ public class Supervisor {
* @return the method map
**/
HashMap<String, Method> methodMap() {
- return methodMap;
+ return methodMap.getAcquire();
}
/**
@@ -96,9 +96,9 @@ public class Supervisor {
**/
public void addMethod(Method method) {
synchronized (methodMapLock) {
- HashMap<String, Method> newMap = new HashMap<>(methodMap);
+ HashMap<String, Method> newMap = new HashMap<>(methodMap());
newMap.put(method.name(), method);
- methodMap = newMap;
+ methodMap.setRelease(newMap);
}
}
@@ -109,9 +109,9 @@ public class Supervisor {
**/
public void removeMethod(String methodName) {
synchronized (methodMapLock) {
- HashMap<String, Method> newMap = new HashMap<>(methodMap);
+ HashMap<String, Method> newMap = new HashMap<>(methodMap());
newMap.remove(methodName);
- methodMap = newMap;
+ methodMap.setRelease(newMap);
}
}
@@ -124,9 +124,9 @@ public class Supervisor {
**/
public void removeMethod(Method method) {
synchronized (methodMapLock) {
- HashMap<String, Method> newMap = new HashMap<>(methodMap);
+ HashMap<String, Method> newMap = new HashMap<>(methodMap());
if (newMap.remove(method.name()) == method) {
- methodMap = newMap;
+ methodMap.setRelease(newMap);
}
}
}