Fornece padrões de engenharia de software em Java moderno (Java 17/21/25 LTS) baseados na documentação oficial (docs.oracle.com/en/java), Java Concurrency in Practice (Goetz) e boas práticas de JVM. Cobre lambdas/Streams, Records e sealed classes, Virtual Threads (Project Loom), concorrência segura (Executor framework, immutability, happens-before, CompletableFuture), Collections, Pattern Matching, JCTools/Agrona e tuning de JVM (G1/ZGC, JIT).
Scanned 9/8/2026
Install to Claude Code
npx -y skills add dandgabr/skills --skill lang-java --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Lang Java?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dandgabr-lang-java)More formats (shields.io, HTML) on the badges page.
---
name: lang-java
description: Fornece padrões de engenharia de software em Java moderno (Java 17/21/25 LTS) baseados na documentação oficial (docs.oracle.com/en/java), Java Concurrency in Practice (Goetz) e boas práticas de JVM. Cobre lambdas/Streams, Records e sealed classes, Virtual Threads (Project Loom), concorrência segura (Executor framework, immutability, happens-before, CompletableFuture), Collections, Pattern Matching, JCTools/Agrona e tuning de JVM (G1/ZGC, JIT).
---
# Habilidade de IA: Engenharia de Software em Java (Java Moderno e Concorrência)
Esta skill orienta a inteligência artificial a escrever código Java moderno, idiomático e thread-safe, baseada na documentação oficial Java (JDK 21/25 LTS — docs.oracle.com/en/java) e na obra *Java Concurrency in Practice* (Brian Goetz et al., Addison-Wesley).
---
## 🧭 1. Java Moderno (Linguagem)
- **Records**: use para dados imutáveis (Value Objects, DTOs). Componha com `record` patterns para deconstrução segura.
- **Sealed classes/interfaces**: modele hierarquias fechadas (ADTs) combinadas com pattern matching em `switch` exaustivo.
- **Text blocks e switch expressions**: prefira `switch` como expressão (arrows, exaustividade compilada) a cadeias de if/else.
- **Optional**: tipo de retorno de consultas eventualmente vazias; **nunca** para campos ou parâmetros (anti-padrão).
- **Streams**: expressam pipelines sobre coleções; cuidado em hot paths (alocação de lambdas/boxes); use loops tradicionais onde o profiler apontar gargalo.
- **Var e generics**: `var` para tipo óbvio local; escreva generics com PECS (`extends`/`super` wildcards corretos) e bounded types.
- **Imutabilidade por padrão**: `final` em campos, classes fecháveis, coleções imutáveis (`List.of`, `Map.copyOf`). Imutáveis são thread-safe gratuitos.
---
## 🔀 2. Concorrência Segura (Java Concurrency in Practice)
### 2.1 Estado compartilhado e visibilidade
- **Regra de ouro**: sempre que mais de um thread acessa um mesmo estado mutável, **todas** as vias de acesso devem usar o mesmo lock.
- **Volatile**: garante visibilidade e ordenação (happens-before), não atomicidade composta. Use para flags de parada e publicação segura; nunca para `count++`.
- **Happens-before**: monitor locks, `volatile`, `Thread.start/join`, `Executor.submit`, `CompletableFuture` estabelecem happens-before; sem ele, reordenações do JIT tornam dados publicados inconsistências (stale data, reordering).
- **Escape analysis e publicação**: publique objetos imutáveis livremente (safe publication); objetos mutáveis exigem synchronization, `final` fields ou fences.
- **Thread confinement**: stack confinement (locais), `ThreadLocal` — zero sincronização quando o estado não cruza threads.
### 2.2 Composição de objetos thread-safe
- **Delegação**: componha segurança a partir de classes thread-safe (`ConcurrentHashMap`, `CopyOnWriteArrayList`, `AtomicLong`, `BlockingQueue`).
- **Invariantes multi-variáveis** (ex: `lower <= upper`): exigem **um único lock** que cubra todos os campos do invariante; delegar por variável quebra o invariante.
- **Client-side locking frágil**: só se o "cliente" souber qual lock a classe usa; prefira extensão por composição.
- **Immutability como estratégia**: objetos imutáveis podem ser compartilhados sem lock (regra happens-before do campo `final`).
### 2.3 Building blocks (java.util.concurrent)
- **Executor framework**: nunca crie `Thread` cru em produção — desacople submissão de execução com `ExecutorService` (thread pools nomeados, `ManagedThreadFactory` em containers).
- **BlockingQueues** (`ArrayBlockingQueue`, `LinkedBlockingQueue`, `SynchronousQueue`): produtor/consumidor com backpressure natural.
- **Sincronizadores**: `CountDownLatch` (aguardar N eventos), `Semaphore` (limitar acesso), `CyclicBarrier` (pontos de sincronização), `Phaser` (fases).
- **ConcurrentHashMap**: não sincronize manualmente o mapa; use `compute`, `computeIfAbsent`, `putIfAbsent` para atomicidade por chave.
- **CompletableFuture**: composição assíncrona não-bloqueante (`thenApply/thenCompose/thenCombine`, `orTimeout`); evite `get()` sem timeout.
### 2.4 Task execution e pools
- **Tamanho do pool**: CPU-bound ≈ `Runtime.availableProcessors()`; IO-bound ≈ `cores × (1 + wait/compute)`. Prefira filas limitadas (`ArrayBlockingQueue`) + política de saturação (`CallerRunsPolicy` para degenerar graciosamente, ou rejeição com backpressure).
- **Executores da plataforma vs `newVirtualThreadPerTaskExecutor`**: I/O-intensivo com milhões de tarefas → Virtual Threads; CPU-intensivo → pool fixo de Platform Threads.
- **Encontre o paralelismo explorável** (Lei de Amdahl): adicionar threads além dos núcleos de CPU não acelera cargas CPU-bound; adiciona contaminação de cache e trocas de contexto.
### 2.5 Cancellation, shutdown e liveness
- **Cooperação**: implemente cancelamento via interruption (`Thread.interrupt`, checks periódicos de `isInterrupted`) ou flag `volatile` de cancelamento.
- **Time-outs em todas as blocking calls**; nunca `Thread.stop`/`suspend` (deprecadas/destrutivas).
- **Deadlock** (lock-ordering cycles): ordene aquisição de locks globalmente; alternativas com `tryLock` timeout (recuperação sem deadlock).
- **Starvation e livelock**: evite prioridades de thread; fairness (`new ReentrantLock(true)`) só onde estritamente necessário.
- **Shutdown gracioso**: `shutdown()` + `awaitTermination` + "shutdown hooks" para estados persistentes.
### 2.6 Competição e performance
- **Reduza contenção**: escopo do lock curto, lock striping/concurrent collections, copy-on-write para read-heavy, atômicos (CAS) em contadores leves (`LongAdder` em alta contenção).
- **Nonblocking algorithms** (CAS/lock-free): `AtomicReference`/`AtomicStampedReference` (ABA com versionamento); prefira bibliotecas maduras (JCTools, Agrona) a lock-free caseiro.
- **False sharing**: pad fields compartilhados entre threads em cache lines distintas (`@Contended`/jdk.internal.vm.annotation ou padding manual).
---
## 🧵 3. Virtual Threads (Project Loom, JDK 21+)
Baseado na documentação oficial (docs.oracle.com/en/java/javase/21/core/virtual-threads.html, JEP 444):
- **O que são**: instâncias de `java.lang.Thread` implementadas pelo runtime Java (não pelo SO), mapeando milhões de threads virtuais em poucos *carrier threads* de plataforma. Bloqueio de I/O suspende (unmount) a thread virtual, liberando o carrier.
- **Fornecem escala (throughput), não velocidade (latência)**: não executam código mais rápido que platform threads; existem para ampliar concorrência em servidores thread-per-request.
- **Quando usar**: altíssimo throughput concorrente com tarefas majoritariamente bloqueadas em I/O (HTTP, JDBC); **não** para tarefas CPU-intensivas ou longas.
- **Escreva código síncrono simples com I/O bloqueante**: o estilo thread-per-request com APIs bloqueantes é o que mais se beneficia; evite misturar código bloqueante síncrono com frameworks assíncronos (Callbacks/CompletableFuture encadeado não se beneficia).
- **Nunca faça pool de virtual threads**: crie um executor por tarefa com `Executors.newVirtualThreadPerTaskExecutor()` (leve, fechável com try-with-resources). O número de threads virtuais deve igualar o número de tarefas concorrentes, como "strings para nomes".
- **Use `Semaphore` para limitar concorrência** (ex: serviço externo que aceita 10 chamadas simultâneas) em vez de pool de threads — filas de threads bloqueadas são equivalentes a filas de tarefas. Pools de conexão de banco já funcionam como semáforo.
- **Pinning**: uma thread virtual **não desmonta do carrier** quando bloqueia dentro de bloco/método `synchronized` ou método `native`/FFM. Pinning frequente e longo prejudica a escalabilidade.
- Detecção: evento JFR `jdk.VirtualThreadPinned` (default > 20 ms) ou `-Djdk.tracePinnedThreads=full|short`.
- Correção: troque `synchronized` por `ReentrantLock` (`lock.lock(); try { ... } finally { lock.unlock(); }`) nos pontos longos; preserve `synchronized` em operações curtas/infrequentes.
- **ThreadLocal**: cuidado com caches de objetos caros em `ThreadLocal` (ex: `SimpleDateFormat`) — com milhões de threads virtuais cada tarefa instancia um objeto novo (o oposto do efeito desejado). Prefira objetos imutáveis compartilhados (`DateTimeFormatter`) ou Scoped Values.
- **Observabilidade**: dumps com `jcmd <pid> Thread.dump_to_file -format=json <file>`; eventos JFR `jdk.VirtualThreadStart/End/Pinned/SubmitFailed`.
---
## ⚡ 4. Tuning de JVM e Boas Práticas de Performance
- **GC**: G1 (padrão balanceado), ZGC/Shenandoah (latência de sub-ms com heap grande); dimensione `-Xms`/`-Xmx` iguais em produção; monitore pausas e frequência de full GC.
- **JIT**: métodos pequenos quentes são inlinados; evite megamorphic call sites (mantenha bimorphic), métodos frios grandes quebram inlining.
- **Medidas**: microbenchmarks com JMH (forks, warmup, blackhole); nunca `System.nanoTime` avulso; profilers async-profiler/flamegraphs para CPU e alocação.
- **Coleções**: escolha pelo perfil de acesso (`HashMap` vs `ConcurrentHashMap`, `ArrayDeque` em vez de `Stack`, `EnumMap` tipados); sized adequadamente (`initialCapacity`) evita rehash.
- **Strings e I/O**: `StringBuilder` em loops; buffers com size adequado; UTF-8 explícito.
---
## 🧪 5. Protocolo de Implementação e Revisão (Java)
1. **Modele o estado compartilhado**: identifique variáveis mutáveis compartilhadas e escolha a estratégia (imutável > confinement > concurrent collection > lock).
2. **Desacople tarefas com Executors**: defina política (pool size, fila, saturação, naming, context propagation) documentada.
3. **Prove a thread-safety**: invariante identificado + mecanismo que o protege + teste de estresse concorrente (ex: jcstress para algoritmos avançados).
4. **Prefira APIs de alto nível** (`java.util.concurrent`) a primitivas (`synchronized/wait/notify`) quebradas à mão.
5. **Instrumente e meça**: latência p99, GC, contention (jstack, JFR, jitwatch) antes/depois da mudança.
6. **Documente**: estados compartilhados com o lock/guard que os protege, razões de invariante e política de shutdown.
---
---
## 🧼 6. Java Distiller: Refatoração, Modernização e Código Idiomático (Java 21/25)
Inspirado nos princípios do *Java Distiller* da comunidade SouJava, aplique a simplificação rigorosa e a eliminação de complexidade acidental:
### 6.1 Transformações Canônicas de Modernização
1. **POJO / JavaBean para Record**:
- Substitua classes de transporte de dados verbosas (getters, setters, equals, hashCode manuais) por `record`.
- Utilize deconstrução com Record Patterns:
```java
if (response instanceof SuccessResponse(var payload, var timestamp)) {
process(payload);
}
```
2. **Loops Imperativos para Stream Pipelines & Gatherers**:
- Converta loops com acumuladores e mutação de listas para Streams declarativos:
```java
// Antes: loop imperativo acumulador
// Depois:
var activeNames = users.stream()
.filter(User::isActive)
.map(User::name)
.toList();
```
3. **Switch Expressions & Sealed Hierarchies**:
- Elimine árvores de `instanceof` e casts manuais. Use `switch` exaustivo com type pattern matching:
```java
return switch (event) {
case OrderCreated e -> handleCreated(e);
case OrderCancelled e -> handleCancelled(e);
};
```
4. **Legado Date/Calendar para `java.time`**:
- Elimine `java.util.Date`, `Calendar` e `SimpleDateFormat` (não thread-safe). Use `Instant`, `LocalDate`, `ZonedDateTime` e `DateTimeFormatter`.
5. **Eliminação de Código Prolixo ("Distill, don'''t decorate")**:
- Remova abstrações intermediárias que apenas delegam chamadas sem agregar valor de domínio.
- Preserve comportamento funcional idêntico com menos linhas e maior expressividade.
---
## 🔗 Integração com Outras Skills
- [jpa-hibernate-performance](../../databases/jpa-hibernate-performance/SKILL.md): persistência eficiente (N+1, batching, cache) em Java.
- [backend-developer](../../roles/backend-developer/SKILL.md): integração de serviços e APIs com contratos REST/gRPC.
- [latency-engineering](../../engineering-practices/latency-engineering/SKILL.md): sizing de thread pools com Little's Law e redução de lock contention.
- [lang-python](../lang-python/SKILL.md) e [python-performance-parallelism](../../engineering-practices/python-performance-parallelism/SKILL.md): equivalentes de concorrência em Python (GIL vs Loom).
- [code-optimizer](../../roles/code-optimizer/SKILL.md): o agente de otimização orquestra esta skill em refatorações Java.Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!