Skip to content

Commit dcce181

Browse files
maarztctrueden
authored andcommitted
DefaultConsoleService: use CopyOnWriteArrayList to simplify code
1 parent 3d04900 commit dcce181

File tree

1 file changed

+6
-19
lines changed

1 file changed

+6
-19
lines changed

src/main/java/org/scijava/console/DefaultConsoleService.java

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.ArrayList;
3838
import java.util.LinkedList;
3939
import java.util.List;
40+
import java.util.concurrent.CopyOnWriteArrayList;
4041

4142
import org.scijava.Context;
4243
import org.scijava.console.OutputEvent.Source;
@@ -69,9 +70,7 @@ public class DefaultConsoleService extends
6970
private OutputStreamReporter out, err;
7071

7172
/** List of listeners for {@code stdout} and {@code stderr} output. */
72-
private ArrayList<OutputListener> listeners;
73-
74-
private OutputListener[] cachedListeners;
73+
private List<OutputListener> listeners;
7574

7675
// -- ConsoleService methods --
7776

@@ -116,26 +115,19 @@ public void processArgs(final String... args) {
116115
@Override
117116
public void addOutputListener(final OutputListener l) {
118117
if (listeners == null) initListeners();
119-
synchronized (listeners) {
120-
listeners.add(l);
121-
cacheListeners();
122-
}
118+
listeners.add(l);
123119
}
124120

125121
@Override
126122
public void removeOutputListener(final OutputListener l) {
127123
if (listeners == null) initListeners();
128-
synchronized (listeners) {
129-
listeners.remove(l);
130-
cacheListeners();
131-
}
124+
listeners.remove(l);
132125
}
133126

134127
@Override
135128
public void notifyListeners(final OutputEvent event) {
136129
if (listeners == null) initListeners();
137-
final OutputListener[] toNotify = cachedListeners;
138-
for (final OutputListener l : toNotify)
130+
for (final OutputListener l : listeners)
139131
l.outputOccurred(event);
140132
}
141133

@@ -163,16 +155,11 @@ private synchronized void initListeners() {
163155
err = new OutputStreamReporter(Source.STDERR);
164156
syserr.getParent().addOutputStream(err);
165157

166-
listeners = new ArrayList<>();
167-
cachedListeners = listeners.toArray(new OutputListener[0]);
158+
listeners = new CopyOnWriteArrayList<>();
168159
}
169160

170161
// -- Helper methods --
171162

172-
private void cacheListeners() {
173-
cachedListeners = listeners.toArray(new OutputListener[listeners.size()]);
174-
}
175-
176163
private MultiPrintStream multiPrintStream(final PrintStream ps) {
177164
if (ps instanceof MultiPrintStream) return (MultiPrintStream) ps;
178165
return new MultiPrintStream(ps);

0 commit comments

Comments
 (0)