Начиная с Java 8, теперь существует класс CompletableFuture<T>
, который поддерживает продолжения и более функциональные / реактивные подходы программирования.
Рассмотрим следующий пример, где класс предлагает метод downloadAndResize
:
public CompletableFuture<Image> downloadAndResize(String imageUrl, int width, int height) {
return CompletableFuture
.supplyAsync(() -> downloadImage(imageUrl))
.thenApplyAsync(x -> resizeImage(x, width, height));
}
private Image downloadImage(String url){
// TODO Download the image from the given url...
}
private Image resizeImage(Image source, int width, int height){
// TODO Resize the image to w / h
}
Использование вышеуказанного метода может выглядеть следующим образом:
CompletableFuture<Image> imagePromise = downloadAndResize("http://some/url", 300, 200);
imagePromise.thenAccept(image -> {
// Gets executed when the image task has successfully completed
// do something with the image
});