Otimização de Código em Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Criar threads é caro!
$$
Pools de threads:
ExecutorService// Pool fixo com 4 threads ExecutorService fixedPool = Executors.newFixedThreadPool(4);// Pool em cache que cresce conforme necessário ExecutorService cachedPool = Executors.newCachedThreadPool();// Executor de thread única ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newFixedThreadPool(4);
// Enviar uma tarefa sem valor de retorno
executor.execute(() -> System.out.println("Simple task"));
// Enviar uma tarefa com valor de retorno (Callable)
Future<Integer> future = executor.submit(() -> {
Thread.sleep(1000);
return 42;
});
// Obter o resultado do Future (bloqueia até concluir)
int result = future.get();
// Sinaliza encerramento, mas mantém tarefas em execução executor.shutdown();// Aguardar término (com timeout) boolean terminated = executor.awaitTermination(5, TimeUnit.SECONDS);// Forçar encerramento imediato, cancelando tarefas em execução executor.shutdownNow();
CompletableFutureFunction// Executar assíncrono com executor padrão CompletableFuture<Void> runAsync = CompletableFuture.runAsync(() -> performTask());// Fornecer assíncrono com executor personalizado ExecutorService executor = Executors.newCachedThreadPool(); CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> fetchData(), executor);
CompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> fetchUserData(userId))
.thenApply(data -> extractUsername(data))
.exceptionally(ex -> "Unknown user");
// Acessar o resultado quando pronto
future.thenAccept(result -> System.out.println(result));
Otimização de Código em Java