diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-03-18 08:55:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-18 08:55:20 +0100 |
commit | 99f2cdcefeecf6a1254c021a72c475905216fc37 (patch) | |
tree | 387c691e4664cd01274f77079ae1d10e92adf219 | |
parent | 3fa247922f85366f2b9723bd5f5239cd6ae783fa (diff) | |
parent | 89267a3b125a28e447126291c4545b3d0d95e7b6 (diff) |
Merge pull request #17021 from vespa-engine/balder/synchronize-on-the-same-object
synchronize on static method and on instance method are completly dis…
-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); |