Remove AtomicReference
This commit is contained in:
@@ -24,7 +24,6 @@ import java.util.*;
|
|||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,7 +64,7 @@ public final class TaskExecutor {
|
|||||||
public TaskExecutor start() {
|
public TaskExecutor start() {
|
||||||
taskListeners.forEach(TaskListener::onStart);
|
taskListeners.forEach(TaskListener::onStart);
|
||||||
workerQueue.add(scheduler.schedule(() -> {
|
workerQueue.add(scheduler.schedule(() -> {
|
||||||
boolean flag = executeTasks(Collections.singleton(firstTask), new AtomicReference<>());
|
boolean flag = executeTasks(Collections.singleton(firstTask));
|
||||||
taskListeners.forEach(it -> it.onStop(flag, this));
|
taskListeners.forEach(it -> it.onStop(flag, this));
|
||||||
}));
|
}));
|
||||||
return this;
|
return this;
|
||||||
@@ -75,7 +74,7 @@ public final class TaskExecutor {
|
|||||||
taskListeners.forEach(TaskListener::onStart);
|
taskListeners.forEach(TaskListener::onStart);
|
||||||
AtomicBoolean flag = new AtomicBoolean(true);
|
AtomicBoolean flag = new AtomicBoolean(true);
|
||||||
Future<?> future = scheduler.schedule(() -> {
|
Future<?> future = scheduler.schedule(() -> {
|
||||||
flag.set(executeTasks(Collections.singleton(firstTask), new AtomicReference<>()));
|
flag.set(executeTasks(Collections.singleton(firstTask)));
|
||||||
taskListeners.forEach(it -> it.onStop(flag.get(), this));
|
taskListeners.forEach(it -> it.onStop(flag.get(), this));
|
||||||
});
|
});
|
||||||
workerQueue.add(future);
|
workerQueue.add(future);
|
||||||
@@ -101,7 +100,7 @@ public final class TaskExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean executeTasks(Collection<? extends Task> tasks, AtomicReference<Exception> exception) throws InterruptedException {
|
private boolean executeTasks(Collection<? extends Task> tasks) throws InterruptedException {
|
||||||
if (tasks.isEmpty())
|
if (tasks.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -129,8 +128,6 @@ public final class TaskExecutor {
|
|||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
exception.set(tasks.stream().map(Task::getLastException).filter(Objects::nonNull).findAny().orElse(null));
|
|
||||||
return success.get() && !canceled;
|
return success.get() && !canceled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,10 +160,11 @@ public final class TaskExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomicReference<Exception> dependentsException = new AtomicReference<>();
|
Collection<? extends Task> dependents = task.getDependents();
|
||||||
boolean doDependentsSucceeded = executeTasks(task.getDependents(), dependentsException);
|
boolean doDependentsSucceeded = executeTasks(dependents);
|
||||||
|
Exception dependentsException = dependents.stream().map(Task::getLastException).filter(Objects::nonNull).findAny().orElse(null);
|
||||||
if (!doDependentsSucceeded && task.isRelyingOnDependents() || canceled) {
|
if (!doDependentsSucceeded && task.isRelyingOnDependents() || canceled) {
|
||||||
task.setLastException(dependentsException.get());
|
task.setLastException(dependentsException);
|
||||||
throw new SilentException();
|
throw new SilentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,11 +191,12 @@ public final class TaskExecutor {
|
|||||||
variables.set(taskResult.getId(), taskResult.getResult());
|
variables.set(taskResult.getId(), taskResult.getResult());
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomicReference<Exception> dependenciesException = new AtomicReference<>();
|
Collection<? extends Task> dependencies = task.getDependencies();
|
||||||
boolean doDependenciesSucceeded = executeTasks(task.getDependencies(), dependenciesException);
|
boolean doDependenciesSucceeded = executeTasks(dependencies);
|
||||||
|
Exception dependenciesException = dependencies.stream().map(Task::getLastException).filter(Objects::nonNull).findAny().orElse(null);
|
||||||
if (!doDependenciesSucceeded && task.isRelyingOnDependencies()) {
|
if (!doDependenciesSucceeded && task.isRelyingOnDependencies()) {
|
||||||
Logging.LOG.severe("Subtasks failed for " + task.getName());
|
Logging.LOG.severe("Subtasks failed for " + task.getName());
|
||||||
task.setLastException(dependenciesException.get());
|
task.setLastException(dependenciesException);
|
||||||
throw new SilentException();
|
throw new SilentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user