diff --git a/configuration/spotbugs-filters.xml b/configuration/spotbugs-filters.xml index 9f36b9481..89db6d5b6 100644 --- a/configuration/spotbugs-filters.xml +++ b/configuration/spotbugs-filters.xml @@ -87,4 +87,10 @@ + + + + + + diff --git a/tinylog-impl/src/main/java/org/tinylog/core/WritingThread.java b/tinylog-impl/src/main/java/org/tinylog/core/WritingThread.java index 6e82ba5de..b4ebb5aba 100644 --- a/tinylog-impl/src/main/java/org/tinylog/core/WritingThread.java +++ b/tinylog-impl/src/main/java/org/tinylog/core/WritingThread.java @@ -28,8 +28,6 @@ public final class WritingThread extends Thread { private static final String THREAD_NAME = "tinylog-WritingThread"; - private static final long MILLISECONDS_TO_SLEEP = 10L; - private final Object mutex; private final Collection writers; private List tasks; @@ -67,12 +65,6 @@ public void run() { flush(writers); writers.clear(); - - try { - sleep(MILLISECONDS_TO_SLEEP); - } catch (InterruptedException ex) { - // Ignore and continue - } } } @@ -88,6 +80,7 @@ public void add(final Writer writer, final LogEntry logEntry) { Task task = new Task(writer, logEntry); synchronized (mutex) { tasks.add(task); + mutex.notify(); } } @@ -102,9 +95,8 @@ public void add(final Writer writer, final LogEntry logEntry) { public void shutdown() { synchronized (mutex) { tasks.add(Task.POISON); + mutex.notify(); } - - interrupt(); } /** @@ -114,13 +106,17 @@ public void shutdown() { */ private List receiveTasks() { synchronized (mutex) { - if (tasks.isEmpty()) { - return Collections.emptyList(); - } else { - List currentTasks = tasks; - tasks = new ArrayList(); - return currentTasks; + while (tasks.isEmpty()) { + try { + mutex.wait(); + } catch (InterruptedException ex) { + return Collections.emptyList(); + } } + + List currentTasks = tasks; + tasks = new ArrayList(); + return currentTasks; } }