🔧 Item 80: Dê preferência aos executores, às tarefas e às streams em vez das threads
Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to
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.
🔧 Item 34: Use enums em vez de constantes int
📈 37.44 Punkte
🔧 Programmierung
🔧 Item 28: Prefira as listas aos arrays
📈 34.17 Punkte
🔧 Programmierung
🔧 Agendamento de Tarefas com Quartz.NET
📈 25.78 Punkte
🔧 Programmierung
🔧 Criei um Organizador de Tarefas com IA
📈 25.78 Punkte
🔧 Programmierung
🔧 Item 84: Não dependa do agendador de threads
📈 24.75 Punkte
🔧 Programmierung