diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java index 3197606ed3e6eaa18bf8b6e6c070b859d3465d74..3e27f69b6e01a1c8f8a7524241995e0b3e0346cc 100644 --- a/src/main/java/teetime/framework/ThreadService.java +++ b/src/main/java/teetime/framework/ThreadService.java @@ -137,8 +137,10 @@ class ThreadService extends AbstractService<ThreadService> { } private void sendStartingSignal(final Set<Stage> newThreadableStages) { - for (Stage stage : newThreadableStages) { - ((TeeTimeThread) stage.getOwningThread()).sendStartingSignal(); + synchronized (newThreadableStages) { + for (Stage stage : newThreadableStages) { + ((TeeTimeThread) stage.getOwningThread()).sendStartingSignal(); + } } } @@ -149,8 +151,14 @@ class ThreadService extends AbstractService<ThreadService> { @Override void onTerminate() { - for (Stage stage : threadableStages) { - stage.terminate(); + abortStages(threadableStages); + } + + private void abortStages(final Set<Stage> currentTreadableStages) { + synchronized (currentTreadableStages) { + for (Stage stage : currentTreadableStages) { + stage.terminate(); + } } }