Java Concurrency
Priority: P1 (HIGH)
Modern concurrent programming emphasizing Virtual Threads (Loom) and safety.
Implementation Guidelines
- Virtual Threads (Java 21): Use for high-throughput I/O.
Executors.newVirtualThreadPerTaskExecutor(). - Structured Concurrency: Use
StructuredTaskScopeto treat related tasks as a single unit (Scope, Fork, Join). - Immutability: Share immutable data between threads to avoid race conditions.
- CompletableFuture: Use for composing async pipelines (if not using Virtual Threads).
- Atomic Variables: Use
AtomicInteger,LongAdderfor simple counters. - Locks: Prefer
ReentrantLock/ReadWriteLockoversynchronizedfor fine-grained control. - Thread Safety: Document
@ThreadSafeor@NotThreadSafe.
Anti-Patterns
- No new Thread(): Use Executors or virtual threads; never create threads manually.
- No Pooling Virtual Threads: Virtual threads are cheap; never pool them.
- No Blocking in synchronized: Pins carrier thread (Loom pitfall); use ReentrantLock instead.
- No Shared Mutable State: Share only immutable data between threads.
- No Thread.stop/suspend: Deprecated; use interruption or cancellation instead.