Criação e Conclusão de CompletableFutures
Use supplyAsync, runAsync e completedFuture e conclua futures manualmente com complete e completeExceptionally.
Criação e Conclusão de CompletableFutures é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
O que é CompletableFuture?
CompletableFuture<T> (Java 8 ou posterior) representa uma computação assíncrona que pode ser concluída, encadeada e combinada explicitamente. Ele implementa tanto Future quanto CompletionStage.
supplyAsync: iniciando uma computação assíncrona
CompletableFuture.supplyAsync() executa um Supplier no ForkJoinPool comum e retorna um futuro com o resultado.
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// runs on ForkJoinPool.commonPool()
return fetchDataFromNetwork();
});
System.out.println("Non-blocking — this runs immediately");runAsync: dispare e esqueça
runAsync() executa um Runnable de forma assíncrona e retorna CompletableFuture<Void>. Utilize-o quando não precisar de um resultado.
CompletableFuture<Void> task = CompletableFuture.runAsync(() ->
sendEmail("user@example.com", "Welcome!"));
task.thenRun(() -> System.out.println("Email sent"));Executor personalizado
Passe um Executor personalizado para controlar o pool de threads usado pela computação — isso é essencial em aplicativos web nos quais você deseja evitar o bloqueio do pool comum.
ExecutorService pool = Executors.newFixedThreadPool(10);
CompletableFuture<User> future = CompletableFuture.supplyAsync(
() -> userService.findById(42L), pool
);completedFuture: valor já concluído
CompletableFuture.completedFuture(value) retorna um futuro já concluído. É útil para testes ou quando você tem um valor imediato para retornar em um fluxo assíncrono.
CompletableFuture<String> cached = CompletableFuture.completedFuture("cached-value");
cached.thenAccept(System.out::println); // runs immediatelyConcluindo um futuro manualmente
Utilize complete() para fornecer o resultado de fora da computação. Utilize completeExceptionally() para sinalizar uma falha.
CompletableFuture<String> promise = new CompletableFuture<>();
// In another thread or callback:
promise.complete("done!"); // signals success
// promise.completeExceptionally(new RuntimeException("fail")); // signals failure
String result = promise.get(); // blocks until completedget() e join()
Tanto get() quanto join() bloqueiam até que o futuro seja concluído. get() lança exceções verificadas; join() as encapsula em CompletionException não verificada.
try {
String r = future.get(5, TimeUnit.SECONDS); // checked exceptions
} catch (TimeoutException | InterruptedException | ExecutionException e) { ... }
// Or:
String r = future.join(); // throws CompletionException (unchecked)getNow() para uma verificação sem bloqueio
getNow(defaultValue) retorna o resultado se ele já tiver sido concluído ou o valor padrão fornecido caso contrário — sem bloqueio nem espera.
String result = future.getNow("loading...");
System.out.println(result); // "loading..." if not yet doneisDone, isCancelled, isCompletedExceptionally
Verifique o estado de uma operação assíncrona sem bloqueá-la. Combine essas verificações em loops de consulta periódica ou em código de monitoramento.
if (future.isDone()) System.out.println("Completed");
if (future.isCancelled()) System.out.println("Cancelled");
if (future.isCompletedExceptionally()) System.out.println("Failed");cancel() para lidar com tempos limite
Chame cancel(true) para cancelar uma computação em andamento. O futuro passa para o estado cancelado, e qualquer get() bloqueante lança CancellationException.
CompletableFuture<String> future = fetchAsync();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> future.cancel(true), 3, TimeUnit.SECONDS);completeOnTimeout (Java 9 ou posterior)
completeOnTimeout(value, timeout, unit) conclui automaticamente o futuro com um valor padrão se ele não tiver sido concluído dentro do tempo limite — uma alternativa mais limpa do que o cancelamento manual.
CompletableFuture<String> result = fetchAsync()
.completeOnTimeout("default", 3, TimeUnit.SECONDS);
System.out.println(result.join()); // "default" if fetch took > 3sVerificação rápida
Qual método inicia uma computação assíncrona no ForkJoinPool comum e retorna um valor?
Recapitulação
supplyAsync / runAsync iniciam trabalho assíncrono. complete / completeExceptionally concluem a operação manualmente. Utilize join() para bloqueios com exceções não verificadas. completeOnTimeout lida com tempos limite de forma simples.
Perguntas Frequentes
A aula “Criação e Conclusão de CompletableFutures” é grátis?
Sim — o texto completo de “Criação e Conclusão de CompletableFutures” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Criação e Conclusão de CompletableFutures”?
Use supplyAsync, runAsync e completedFuture e conclua futures manualmente com complete e completeExceptionally. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Criação e Conclusão de CompletableFutures”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Criação e Conclusão de CompletableFutures
- Encadeamento com thenApply e thenCompose
- Combinação de Futures: allOf e anyOf
- Tratamento de Erros e Pipeline HTTP Assíncrono