diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-03-18 06:25:24 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-03-18 06:25:24 +0100 |
commit | 89267a3b125a28e447126291c4545b3d0d95e7b6 (patch) | |
tree | f4029c0140e117dd24f10f60aad07a6b9c994bd5 /logserver/src/main | |
parent | 841d8fd3093b4794eaedb6fcfd29b2ab152f618a (diff) |
synchronize on static method and on instance method are completly disjunct.
Instead you should synchonize exactly what you need.
Diffstat (limited to 'logserver/src/main')
-rw-r--r-- | logserver/src/main/java/com/yahoo/logserver/Flusher.java | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/logserver/src/main/java/com/yahoo/logserver/Flusher.java b/logserver/src/main/java/com/yahoo/logserver/Flusher.java index a837f9491dc..88b44e94aef 100644 --- a/logserver/src/main/java/com/yahoo/logserver/Flusher.java +++ b/logserver/src/main/java/com/yahoo/logserver/Flusher.java @@ -13,11 +13,10 @@ import java.util.logging.Logger; /** * @author Bjorn Borud */ -public class Flusher extends Thread { +class Flusher extends Thread { private static final Logger log = Logger.getLogger(Flusher.class.getName()); private static final Flusher instance; - private static final List<WeakReference<LogHandler>> logHandlers = - new ArrayList<WeakReference<LogHandler>>(); + private final List<WeakReference<LogHandler>> logHandlers = new ArrayList<>(); static { instance = new Flusher(); @@ -28,25 +27,33 @@ public class Flusher extends Thread { super("flusher"); } - public static synchronized void register(LogHandler logHandler) { - logHandlers.add(new WeakReference<>(logHandler)); + static void register(LogHandler logHandler) { + instance.addHandler(logHandler); + } + + private void addHandler(LogHandler logHandler) { + synchronized (logHandlers) { + logHandlers.add(new WeakReference<>(logHandler)); + } } @Override public synchronized void run() { try { while(!isInterrupted()) { - Iterator<WeakReference<LogHandler>> it = logHandlers.iterator(); - while (it.hasNext()) { - WeakReference<LogHandler> r = it.next(); - LogHandler h = r.get(); - if (h == null) { - it.remove(); - } else { - h.flush(); - } - if (log.isLoggable(Level.FINE)) { - log.log(Level.FINE, "Flushing " + h); + synchronized (logHandlers) { + Iterator<WeakReference<LogHandler>> it = logHandlers.iterator(); + while (it.hasNext()) { + WeakReference<LogHandler> r = it.next(); + LogHandler h = r.get(); + if (h == null) { + it.remove(); + } else { + h.flush(); + } + if (log.isLoggable(Level.FINE)) { + log.log(Level.FINE, "Flushing " + h); + } } } Thread.sleep(2000); |