@Override public void progressMade() { final List<FlowCallback> callbackList; synchronized (sync) { callbackList = callbacksToCall; } for (FlowCallback flowCallback : callbackList) { flowCallback.progressMade(); } }
@Override public void completed(final Status status) { final List<FlowCallback> callbackList; synchronized (sync) { updateState(); callbackList = callbacksToCall; // Get the reference before leaving the synchronized } if (jobState == Status.SUCCEEDED && notifiedCallbackAlready.compareAndSet(false, true)) { callCallbacks(callbackList, Status.SUCCEEDED); } else if (jobState == Status.FAILED && notifiedCallbackAlready.compareAndSet(false, true)) { for (ExecutableFlow flow : flows) { exceptions.putAll(flow.getExceptions()); } callCallbacks(callbackList, Status.FAILED); } else { for (FlowCallback flowCallback : callbackList) { flowCallback.progressMade(); } } }