Я бы сохранил список подзадач и индекс, чтобы указать, где остановилось выполнение.Псевдокод:
public class Task {
List<SubTask> subtasks;
int executionIndex = 0;
// ctor, getters, setters, etc...
public void execute() {
for (int i = executionIndex; i < subtasks.size(); ++i) {
subtasks.get(i).execute();
saveProgressToDB(i);
++exectionIndex;
}
}
}