void addDependent(Dependency task) { synchronized (lock) { switch (state) { case WAITING: case RUNNING: runner.dependents.add(task); return; case FAILED: return; case DONE: break; // fall out of lock default: throw Assert.impossibleSwitchCase(state); } } task.dependencyFinished(); }
public void run() { boolean ok = false; CTH.set(Dependency.this); try { runnable.run(); ok = true; } finally { CTH.set(null); final List<Dependency> tasks; synchronized (lock) { tasks = dependents; // clear stuff out in case some stupid executor holds on to the runnable dependents = null; runnable = null; runner = null; state = ok ? State.DONE : State.FAILED; } if (ok) { for (Dependency task : tasks) { task.dependencyFinished(); } } else { for (Dependency task : tasks) { task.dependencyFailed(); } } } } }
/** * Create, and possibly execute, a dependent task from this builder. * * @return the new dependent task */ public Dependency create() { final Collection<Dependency> dependencies = this.dependencies; final Dependency dependentTask = new Dependency(executor, task, dependencies.size() + 1); for (Dependency dependency : dependencies) { dependency.addDependent(dependentTask); } dependentTask.dependencyFinished(); return dependentTask; } }
void addDependent(Dependency task) { synchronized (lock) { switch (state) { case WAITING: case RUNNING: runner.dependents.add(task); return; case FAILED: return; case DONE: break; // fall out of lock default: throw Assert.impossibleSwitchCase(state); } } task.dependencyFinished(); }
void addDependent(Dependency task) { synchronized (lock) { switch (state) { case WAITING: case RUNNING: runner.dependents.add(task); return; case FAILED: return; case DONE: break; // fall out of lock default: throw Assert.impossibleSwitchCase(state); } } task.dependencyFinished(); }
public void run() { boolean ok = false; CTH.set(Dependency.this); try { runnable.run(); ok = true; } finally { CTH.set(null); final List<Dependency> tasks; synchronized (lock) { tasks = dependents; // clear stuff out in case some stupid executor holds on to the runnable dependents = null; runnable = null; runner = null; state = ok ? State.DONE : State.FAILED; } if (ok) { for (Dependency task : tasks) { task.dependencyFinished(); } } else { for (Dependency task : tasks) { task.dependencyFailed(); } } } } }
public void run() { boolean ok = false; CTH.set(Dependency.this); try { runnable.run(); ok = true; } finally { CTH.set(null); final List<Dependency> tasks; synchronized (lock) { tasks = dependents; // clear stuff out in case some stupid executor holds on to the runnable dependents = null; runnable = null; runner = null; state = ok ? State.DONE : State.FAILED; } if (ok) { for (Dependency task : tasks) { task.dependencyFinished(); } } else { for (Dependency task : tasks) { task.dependencyFailed(); } } } } }
/** * Create, and possibly execute, a dependent task from this builder. * * @return the new dependent task */ public Dependency create() { final Collection<Dependency> dependencies = this.dependencies; final Dependency dependentTask = new Dependency(executor, task, dependencies.size() + 1); for (Dependency dependency : dependencies) { dependency.addDependent(dependentTask); } dependentTask.dependencyFinished(); return dependentTask; } }
/** * Create, and possibly execute, a dependent task from this builder. * * @return the new dependent task */ public Dependency create() { final Collection<Dependency> dependencies = this.dependencies; final Dependency dependentTask = new Dependency(executor, task, dependencies.size() + 1); for (Dependency dependency : dependencies) { dependency.addDependent(dependentTask); } dependentTask.dependencyFinished(); return dependentTask; } }