Concurrent tasks management with Java
Всем привет. Давно назревала идея создать extensible task manager для работы с параллельными задачами в Java.
Основная суть такая: есть задачи, которые порождают подзадачи. У каждого таска есть generic параметр и результат выполнения в виде объекта класса TaskResult. Логика следующая: выполнение начинается с главной задачи. На выходе мы получаем объект, содержащий результат выполнения, task name и List дочерних задач. Дальше, по цепочке, должно происходить выполнение сабтасков до тех пор, пока не вернётся TaskResult с пустым списком сабтасков.
Вот что уже есть:
Task interface
public interface Task<O> extends Callable<TaskResult<O>> {
String getName();
Instant getStartTime();
Instant getFinishTime();
}
CallableTask class
@RequiredArgsConstructor
public abstract class CallableTask<I, O> implements Task<O> {
@NotNull
@Getter
private final String name;
@NotNull
@Getter
private final I argument;
@Getter
private Instant startTime;
@Getter
private Instant finishTime;
@Override
public TaskResult<O> call() {
this.startTime = Instant.now();
TaskResult<O> result = process(argument);
this.finishTime = Instant.now();
return result;
}
protected abstract TaskResult<O> process(I argument);
}
TaskResult class
@Data
@RequiredArgsConstructor
public class TaskResult<O> {
public static final TaskResult<?> EMPTY = new TaskResult<>(null, Collections.emptyList(), null);
private final O result;
private final List<Task<?>> subTasks;
private final Task<?> parent;
}
Вопрос такой: с помощью какой технологии лучше реализовать TaskManager? Такой интерфейс я накидал для менеджера:
public interface TaskManager {
void execute(List<Task<?>> tasks);
void execute(Task<?> task);
int getConcurrencyLimit();
long getTotalTasksCount();
}
Думал сделать с помощью ExecutorService, но не хочется работать с Future старого образца. Хотелось бы работать с CompletableFuture, у которого гораздо больше возможностей, но насколько я знаю, работать с ним можно только при использовании ForkJoinFramework. Какие есть идеи / предложения? Критика и нововведения только приветствуются, если всё обоснованно.