Threading implícito em Java abstrai o gerenciamento do ciclo de vida de threads através de pools de threads, permitindo que desenvolvedores enviem tarefas sem criar, iniciar ou gerenciar threads manualmente. A interface ExecutorService e a classe factory Executors são as principais APIs.
new Thread(runnable).start() por tarefa| Método Factory | Comportamento | Caso de Uso |
|---|---|---|
newFixedThreadPool(n) | Exatamente n threads; fila ilimitada | Concorrência estável; tarefas limitadas por CPU |
newCachedThreadPool() | Cria conforme necessário; reusa ociosas (timeout 60s); ilimitado | Tarefas explosivas, de curta duração; limitado por I/O |
newSingleThreadExecutor() | Uma thread; execução sequencial garantida | Serialização, loops de eventos, processamento ordenado |
newScheduledThreadPool(n) | Núcleo fixo; suporta tarefas atrasadas/periódicas | Agendamento, retentativas, limpeza, heartbeats |
newWorkStealingPool() | ForkJoinPool; alvo de paralelismo | Dividir-e-conquistar recursivo (ForkJoinTask) |
ThreadPoolExecutor.AbortPolicy, CallerRunsPolicy)Future para recuperação de resultadoimport java.util.concurrent.*; import java.util.stream.*; public class ImplicitThreadingDemo { public static void main(String[] args) throws InterruptedException { // Pool fixo: 4 threads para trabalho limitado por CPU ExecutorService pool = Executors.newFixedThreadPool(4); // Enviar 10 tarefas IntStream.range(0, 10).forEach(i -> pool.submit(() -> { String thread = Thread.currentThread().getName(); System.out.printf("Tarefa %d executando em %s%n", i, thread); // Simular trabalho try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return "Resultado-" + i; }) ); // Encerramento graceful pool.shutdown(); pool.awaitTermination(1, TimeUnit.MINUTES); // Alternativa moderna: Threads virtuais (Java 21+) // try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { ... } } } supplyAsync, thenCompose, allOf)getActiveCount(), getQueue(), getCompletedTaskCount() via JMX/MicrometerExecutors.newVirtualThreadPerTaskExecutor() — leve, milhões possíveis, ideal para alta concorrência de I/Oshutdown() + awaitTermination())ThreadFactoryBuilder)RejectedExecutionException graciosamenteCompletableFuture para fluxos de trabalho dependentes de resultadoThreading implícito via pools de threads é o padrão para aplicações Java concorrentes—equilibrando simplicidade, desempenho e controle.