diff options
author | Håvard Pettersen <havardpe@oath.com> | 2019-05-13 13:53:38 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2019-05-13 13:53:38 +0000 |
commit | 176abec811a2f93442a95a4dc23196abe33a3bc9 (patch) | |
tree | 63ada2e581265e02cdda8b4a65a6af4452f97ae0 /jrt | |
parent | 670410fec9e06686f49ee2e6c7b304f52f340cd9 (diff) |
use AtomicReference (with weaker constraints; requires Java 9)
Diffstat (limited to 'jrt')
-rw-r--r-- | jrt/src/com/yahoo/jrt/Supervisor.java | 20 |
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); } } } |