public synchronized void transition(final ServiceController<?> controller, final ServiceController.Transition transition) { switch (transition) { case STARTING_to_START_FAILED: { failed.add(controller); break; } case START_FAILED_to_STARTING: { failed.remove(controller); break; } case START_REQUESTED_to_PROBLEM: { problem.add(controller); break; } case PROBLEM_to_START_REQUESTED: { problem.remove(controller); break; } } if (transition.leavesRestState()) { outstanding++; } else if (transition.entersRestState()) { if (outstanding-- == 1) { notifyAll(); } } }