java.util.concurrent.CompletableFuture в Spring
Продолжаю изучать многопоточность по исходникам spring-core.
Искал по пакету java.util.concurrent
и нашел:
class DelegatingCompletableFuture<T> extends CompletableFuture<T> {
private final Future<T> delegate;
public DelegatingCompletableFuture(Future<T> delegate) {
Assert.notNull(delegate, "Delegate must not be null");
this.delegate = delegate;
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
boolean result = this.delegate.cancel(mayInterruptIfRunning);
super.cancel(mayInterruptIfRunning);
return result;
}
}
Я не понял зачем нужно оборачивать делегата и иметь возможность отменять его. Я лишь могу предположить, что делегат обрабатывается отдельно, но хочется иметь возможность отменять делегата вместе с какой-то еще выполняемой задачей. Вот так выглядит CompletableFuture Читайте перед сном: вы либо уснете, либо узнаете что-то интересное из хорошо написанного и документированного кода Doug Lea, специалиста в области многопоточного программирования. Он соавтор крутейшей книги по многопоточности в Java:Java Concurrency in Practice
С DelegatingCompletableFuture
я решил посмотрть коммиты на github.
И все равно не понял зачем он.
Почему нельзя отменять напрямую делегата, не создавая обертку.
Тем более, что никакие методы не переопределяются и делегата можно только отменять, а все остальные вызовы вернут какую-то ересь.
Но Juergen Hoeller должно быть виднее, пожалуй спрошу его напрямую)
Ну и конечно можно сделать свой пулл реквест и засабмитить в Spring.
Если примут будешь контрибьютором, если не примут объяснят в чем неправ и зачем нужен DelegatingCompletableFuture
.