public void taskComplete(TaskInfo taskInfo) { lock.lock(); try { if (taskInfo.isFailed()) { handleFailure(taskInfo); } taskInfo.finishExecution(); runningProjects.remove(taskInfo.getTask().getProject().getPath()); condition.signalAll(); } finally { lock.unlock(); } }