Я надеялся, что существует стандартная среда параллелизма, позволяющая оставаться в курсе хода выполнения длительной задачи, не требуя от клиентской программы заботы об организации и синхронизации всего правильно. Мне показалось, что можно представить расширенную версию интерфейса Future<T>
, которая будет поддерживать:
public short progress();
в дополнение к обычным isDone()
и get()
методам.
Очевидно, что реализация progress()
должна будет напрямую опрашивать объект, поэтому, возможно, Future<T>
нужно будет указать как Future<T extends CanReportProgress>
, где CanReportProgress
- это следующий интерфейс:
public interface CanReportProgress {
public short progress();
}
Возникает вопрос: почему бы не пройти через объект Future
, а не вызывать сам объект, чтобы получить прогресс? Я не знаю. Я должен подумать об этом. Можно утверждать, что он ближе к текущему контракту / семантике, в соответствии с которым объект Callable
сам по себе снова не доступен клиентскому программисту после вызова ExecutorService::submit
/ execute
.