DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Item 80: Dê preferência aos executores, às tarefas e às streams em vez das threads

O uso de threads diretas para gerenciar tarefas assíncronas é complexo, propenso a falhas e não recomendado no desenvolvimento moderno em Java. A introdução do Executor Framework no pacote java.util.concurrent simplifica e melhora a execução de tarefas ao desacoplar a unidade de trabalho (tarefas) do mecanismo de execução.

Vantagens do Executor Framework

  • Simplicidade: Criar uma fila de trabalho ou pool de threads agora requer apenas uma linha de código usando as fábricas estáticas da classe Executors.
  • Flexibilidade: Suporte a tarefas com retorno de resultados (Callable), agendamento de tarefas (ScheduledThreadPoolExecutor), e finalização graciosa de tarefas (shutdown e awaitTermination).
  • Escalabilidade: Possibilidade de configurar pools de threads fixos ou variáveis para gerenciar carga com eficiência.
  • Evita Sobrecarga: Para servidores pesados, é recomendado o uso de pools fixos (newFixedThreadPool) em vez de pools dinâmicos (newCachedThreadPool), evitando a criação excessiva de threads que pode degradar o desempenho.

Tarefas vs Threads

  • Tarefas: Representadas por Runnable ou Callable, são unidades de trabalho independentes.
  • Executores: Os serviços executores gerenciam a execução das tarefas, permitindo flexibilidade na seleção e alteração de políticas de execução.

Extensões do Executor Framework

  • Tarefas Fork-Join: Introduzidas no Java 7, permitem dividir tarefas em subtarefas menores, processadas em paralelo por um ForkJoinPool. As threads nesse pool realizam “roubo de tarefas” para maximizar a utilização da CPU e o desempenho.
  • Streams Paralelas: Construídas sobre pools fork-join, oferecem um meio fácil de aproveitar o paralelismo sem precisar lidar diretamente com a complexidade do fork-join.

Recomendações Gerais

  • Evite gerenciar diretamente threads ou implementar suas próprias filas de trabalho.
  • Use o Executor Framework para aproveitar suas abstrações e benefícios.
  • Para uma compreensão mais profunda, consulte "Java Concurrency in Practice".
  • A adoção do Executor Framework é para a execução de tarefas o que o Collections Framework foi para a manipulação de coleções, trazendo padrões consistentes, reutilizáveis e eficientes ao desenvolvimento Java.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay