Java Concurrency in Practice
Java Concurrency in Practice
Resumo:
Introdução
O livro «Java Concurrency in Practice» (autores: Brian Goetz, Tim Peierls, Joshua Bloch e outros) é, sem exagero, a bíblia da programação multithread em Java. Publicado em 2006, ele ainda permanece como a fonte mais autoritária e profunda de conhecimento sobre concorrência no ecossistema Java. Apesar de quase duas décadas terem se passado desde sua publicação, os princípios fundamentais descritos no livro não envelheceram: o modelo de memória Java (JMM), problemas de visibilidade, atomicidade, ordenação, bem como os padrões de publicação segura de objetos, continuam relevantes até hoje.
O livro não é uma introdução ao Java do zero — ele pressupõe domínio sólido da linguagem e compreensão básica de threads. No entanto, é ele que transforma o desenvolvedor de um "usuário de threads" em um verdadeiro especialista, capaz de projetar aplicações confiáveis, escaláveis e thread-safe.
Sobre o que é este livro
«Java Concurrency in Practice» aborda todos os aspectos-chave da programação concorrente em Java — desde mecanismos de sincronização de baixo nível até abstrações de alto nível do pacote java.util.concurrent. O livro é estruturado de forma lógica: primeiro, explica os problemas básicos do multithreading (condições de corrida, deadlocks, problemas de visibilidade); em seguida, aborda as ferramentas para resolvê-los — synchronized, volatile, final, variáveis atômicas, locks ReentrantLock, semáforos, barreiras. Capítulos separados são dedicados a testes de código multithread, desempenho e escalabilidade, bem como tópicos avançados como Fork-Join e CompletionService.
Atenção especial é dada ao modelo de memória Java (JMM) — é a compreensão do JMM que permite ao desenvolvedor evitar erros difíceis de detectar relacionados ao reordenamento de instruções e cache de dados. O livro contém muitos exemplos de código "correto" e "incorreto", tornando o material claro e prático.
Para quem é este livro
O livro é direcionado a desenvolvedores Java experientes que já lidaram com multithreading e desejam sistematizar seus conhecimentos. Será útil para:
- Desenvolvedores de aplicações server-side (serviços web, processamento de requisições, filas de tarefas);
- Especialistas em sistemas de alta carga e aplicações de baixa latência;
- Arquitetos que projetam sistemas escaláveis;
- Aqueles que se preparam para entrevistas técnicas (especialmente em empresas FAANG);
- Professores e autores de cursos sobre Java.
Para iniciantes, o livro pode parecer difícil — recomenda-se primeiro aprender os fundamentos do multithreading por outras fontes (por exemplo, "Thinking in Java" de Bruce Eckel ou os tutoriais oficiais da Oracle).
O que o leitor aprenderá
- Principais problemas do multithreading: condições de corrida, deadlocks, starvation, inversão de prioridades.
- Thread-safety: como projetar classes que funcionam corretamente quando acessadas por múltiplas threads.
- Modelo de memória Java (JMM): regras happens-before, garantias de visibilidade, atomicidade e ordenação.
- Publicação segura de objetos: como tornar um objeto visível para outras threads sem violar a integridade.
- Ferramentas de sincronização: synchronized, volatile, ReentrantLock, ReadWriteLock, StampedLock.
- Classes atômicas: AtomicInteger, AtomicReference, AtomicLong, AtomicReferenceFieldUpdater.
- Pool de threads e Executor: ThreadPoolExecutor, ScheduledThreadPoolExecutor, ForkJoinPool.
- Coleções para multithreading: ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue, ConcurrentLinkedQueue.
- Testes de código multithread: como escrever testes que detectam corridas e locks (incluindo o uso de Thread.yield() e primitivas de sincronização)