Lädt...


🔧 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 80: Dê preferência aos executores, às tarefas e às streams em vez das threads


📈 176.42 Punkte
🔧 Programmierung

🔧 Item 61: Dê preferência aos tipos primitivos em vez dos tipos primitivos empacotados


📈 87.6 Punkte
🔧 Programmierung

🔧 Item 43: Dê preferência às referências para métodos em vez dos lambdas


📈 66.73 Punkte
🔧 Programmierung

🔧 Item 65: Dê preferência às interfaces em vez da reflexão


📈 66.73 Punkte
🔧 Programmierung

🔧 Item 47: Dê preferência à Collection como um tipo de retorno em vez da Stream


📈 66.73 Punkte
🔧 Programmierung

🔧 Item 46: Dê preferência às funções sem efeitos colaterais nas streams


📈 54.18 Punkte
🔧 Programmierung

🔧 Item 58 - Prefira o loop for-each em vez dos loops for tradicionais


📈 37.44 Punkte
🔧 Programmierung

🔧 Item 54 - Retorne coleções ou arrays vazios, em vez de nulos


📈 37.44 Punkte
🔧 Programmierung

🔧 Item 37: Use EnumMap em vez da indexação ordinal


📈 37.44 Punkte
🔧 Programmierung

🔧 Item 37: Use EnumMap em vez da indexação ordinal


📈 37.44 Punkte
🔧 Programmierung

🔧 Item 35: Use os campos de instância em vez dos valores ordinais


📈 37.44 Punkte
🔧 Programmierung

🔧 Item 36: Use a classe EnumSet em vez dos campos de bits


📈 37.44 Punkte
🔧 Programmierung

🔧 Item 34: Use enums em vez de constantes int


📈 37.44 Punkte
🔧 Programmierung

🔧 Cap 11 Concorrência Item 78: Sincronize o acesso aos dados mutáveis compartilhados


📈 34.17 Punkte
🔧 Programmierung

🔧 Cap 11 Concorrência Item 78: Sincronize o acesso aos dados mutáveis compartilhados


📈 34.17 Punkte
🔧 Programmierung

🔧 Item 39: Prefira as anotações aos padrões de nomenclatura


📈 34.17 Punkte
🔧 Programmierung

🔧 Item 28: Prefira as listas aos arrays


📈 34.17 Punkte
🔧 Programmierung

🔧 O Poder das Tarefas: Como Pequenas Entregas Levam a Grandes Resultados


📈 27.47 Punkte
🔧 Programmierung

📰 Identifying Controversial Pairs in Item-to-Item Recommendations


📈 26.62 Punkte
🔧 AI Nachrichten

🐧 Last Epoch to get 'Item Factions', a unique item trading system for the ARPG


📈 26.62 Punkte
🐧 Linux Tipps

🔧 Criando uma Aplicação Web para QA Testers: Lista de Tarefas de Qualidade


📈 25.78 Punkte
🔧 Programmierung

🔧 Agendamento de Tarefas com Quartz.NET


📈 25.78 Punkte
🔧 Programmierung

🔧 Agendamento de Tarefas em Segundo Plano com Hangfire


📈 25.78 Punkte
🔧 Programmierung

🔧 Dia 24~26 - Gestão de Tarefas (Sistema Operacional)


📈 25.78 Punkte
🔧 Programmierung

🔧 Criei um Organizador de Tarefas com IA


📈 25.78 Punkte
🔧 Programmierung

🔧 Projeto J.A.R.V.I.S. - Como Criei um Assistente Virtual do Zero que Conversa e Executa Tarefas


📈 25.78 Punkte
🔧 Programmierung

🔧 Desenvolvendo minha aplicação lista de tarefas com armazenamento em banco de dados !


📈 25.78 Punkte
🔧 Programmierung

🔧 10 Curiosidades Intrigantes sobre o Gulp: Domine a Automação de Tarefas no Desenvolvimento Front-End


📈 25.78 Punkte
🔧 Programmierung

🔧 10 Curiosidades Intrigantes sobre o Gulp: Domine a Automação de Tarefas no Desenvolvimento Front-End


📈 25.78 Punkte
🔧 Programmierung

🔧 GitHub Actions e a Magia dos Triggers: Automatizando Tarefas com C#


📈 25.78 Punkte
🔧 Programmierung

🔧 Item 48: Tenha cuidado ao fazer streams paralelas


📈 24.89 Punkte
🔧 Programmierung

🔧 Item 45: Seja criterioso ao utilizar as streams


📈 24.89 Punkte
🔧 Programmierung

🔧 Item 84: Não dependa do agendador de threads


📈 24.75 Punkte
🔧 Programmierung

matomo