0Pricing
Java Academy · Aula

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 immediately

Concluindo 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 completed

get() 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 done

isDone, 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 > 3s

Verificaçã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

  1. Criação e Conclusão de CompletableFutures
  2. Encadeamento com thenApply e thenCompose
  3. Combinação de Futures: allOf e anyOf
  4. Tratamento de Erros e Pipeline HTTP Assíncrono
← Voltar para Java Academy