https://github.com/kiquetal/java-concurrency-modern-2026
Learning journey through modern Java concurrency: virtual threads, structured concurrency, JMM, and more
https://github.com/kiquetal/java-concurrency-modern-2026
concurrency java java-concurrency java21 jmm learning loom multithreading structured-concurrency virtual-threads
Last synced: 2 days ago
JSON representation
Learning journey through modern Java concurrency: virtual threads, structured concurrency, JMM, and more
- Host: GitHub
- URL: https://github.com/kiquetal/java-concurrency-modern-2026
- Owner: kiquetal
- Created: 2026-03-21T11:44:33.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-21T18:41:38.000Z (3 months ago)
- Last Synced: 2026-03-22T03:28:49.334Z (3 months ago)
- Topics: concurrency, java, java-concurrency, java21, jmm, learning, loom, multithreading, structured-concurrency, virtual-threads
- Language: Java
- Homepage:
- Size: 176 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Java Concurrency Modern 2026
Learning journey through modern Java concurrency, based on:
- **Java Concurrency in Practice** — Brian Goetz et al.
- **Modern Concurrency in Java** — A N M Bazlur Rahman
- **Java Structured Concurrency** — Anghel Leonard
- **Understanding Java Virtual Threads** — Fu Cheng
## Structure
```
docs/ → Markdown notes (migrating to Astro later)
docs/images/ → Mermaid diagrams (PNG)
src/ → Code examples and demos
exercises/ → Self-test questions per chapter
```
## 📚 Notes
| Chapter | Source | Doc |
| :--- | :--- | :--- |
| Ch. 3 — Sharing Objects | JCiP | [docs/chapter-iii-shared-objects.md](docs/chapter-iii-shared-objects.md) |
| Ch. 16 — The Java Memory Model | JCiP | [docs/chapter-xvi-the-java-memory-model.md](docs/chapter-xvi-the-java-memory-model.md) |
## 💻 Code Examples
### Sharing Objects (`dev.concurrency.sharingobjects`)
| File | Topic |
| :--- | :--- |
| [GuardedObjectExample](src/main/java/dev/concurrency/sharingobjects/GuardedObjectExample.java) | Guarded-by pattern |
| [ThreadLocalDemo](src/main/java/dev/concurrency/sharingobjects/ThreadLocalDemo.java) | ThreadLocal usage and cleanup |
| [SharedThreadSafeExample](src/main/java/dev/concurrency/sharingobjects/SharedThreadSafeExample.java) | Thread-safe shared state |
| [ImmutableUser](src/main/java/dev/concurrency/sharingobjects/ImmutableUser.java) | Immutability with defensive copies |
| [TryLockRetryExample](src/main/java/dev/concurrency/sharingobjects/TryLockRetryExample.java) | tryLock with random backoff |
| [ThreadConfinedExample](src/main/java/dev/concurrency/sharingobjects/ThreadConfinedExample.java) | Thread confinement |
| [SharedReadOnlyExample](src/main/java/dev/concurrency/sharingobjects/SharedReadOnlyExample.java) | Read-only shared data |
### Memory Model (`dev.concurrency.memorymodel`)
| File | Topic |
| :--- | :--- |
| [VolatilePiggybackDemo](src/main/java/dev/concurrency/memorymodel/VolatilePiggybackDemo.java) | Piggybacking visibility on volatile |
| [SafePublicationDemo](src/main/java/dev/concurrency/memorymodel/SafePublicationDemo.java) | 4 safe publication idioms |
| [UnsafePublicationDemo](src/main/java/dev/concurrency/memorymodel/UnsafePublicationDemo.java) | Broken singleton + 3 fixes |
## 🧪 Exercises
Self-test questions organized by chapter — see [exercises/README.md](exercises/README.md).
| Chapter | Questions | Topics |
| :--- | :--- | :--- |
| [Ch. III — Shared Objects](exercises/chapter-iii-shared-objects/self-test.md) | 8 | Publication/escape, ThreadLocal, deadlock/livelock |
| [Ch. XVI — Java Memory Model](exercises/chapter-xvi-the-java-memory-model/self-test.md) | 9 | Piggybacking, safe publication, happens-before, `join()` |
## 🖼️ Diagrams
| Diagram | Topic |
| :--- | :--- |
| [happens-before-visibility](docs/images/happens-before-visibility.png) | Happens-before visibility between threads |
| [join-happens-before-chain](docs/images/join-happens-before-chain.png) | `join()` happens-before chain (Writer → Main → Reader) |
| [join-does-not-order-threads](docs/images/join-does-not-order-threads.png) | `join()` does NOT order threads relative to each other |
| [join-as-happens-before](docs/images/join-as-happens-before.png) | `join()` as a happens-before edge |
| [join-vs-safe-publication](docs/images/join-vs-safe-publication.png) | `join()` vs safe publication mechanisms |
| [static-initializer-vs-static-method](docs/images/static-initializer-vs-static-method.png) | `static final` (class loading) vs `static` method (no sync) |
| [trylock-retry-sequence](docs/images/trylock-retry-sequence.png) | tryLock retry with random backoff sequence |
## 🗺️ Chronological Study Plan
### Phase I: Foundations (The Physics)
- [x] **Java Concurrency in Practice** (JCiP)
- Ch. 3: Sharing Objects
- Ch. 16: The Java Memory Model
### Phase II: The Mechanics (The Shift)
- [ ] **Modern Concurrency in Java** (Bazlur Rahman)
- Ch. 4: Virtual Threads ← start here (practical "what and how")
- Ch. 7: Carrier Thread Pinning ← read after Fu Cheng (makes mechanical sense)
- [ ] **Understanding Java Virtual Threads** (Fu Cheng)
- The Scheduler & Continuations ← read between Ch.4 and Ch.7 (the "why")
### Phase III: The Architecture (Patterns)
- [ ] **Java Structured Concurrency** (Anghel Leonard)
- Ch. 2: StructuredTaskScope
- Ch. 5: Scoped Values