{"id":50811983,"url":"https://github.com/kiquetal/java-concurrency-modern-2026","last_synced_at":"2026-06-13T05:33:38.134Z","repository":{"id":345946073,"uuid":"1187933356","full_name":"kiquetal/java-concurrency-modern-2026","owner":"kiquetal","description":"Learning journey through modern Java concurrency: virtual threads, structured concurrency, JMM, and more","archived":false,"fork":false,"pushed_at":"2026-03-21T18:41:38.000Z","size":180,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-22T03:28:49.334Z","etag":null,"topics":["concurrency","java","java-concurrency","java21","jmm","learning","loom","multithreading","structured-concurrency","virtual-threads"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kiquetal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-21T11:44:33.000Z","updated_at":"2026-03-21T18:41:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kiquetal/java-concurrency-modern-2026","commit_stats":null,"previous_names":["kiquetal/java-concurrency-modern-2026"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/kiquetal/java-concurrency-modern-2026","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiquetal%2Fjava-concurrency-modern-2026","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiquetal%2Fjava-concurrency-modern-2026/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiquetal%2Fjava-concurrency-modern-2026/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiquetal%2Fjava-concurrency-modern-2026/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kiquetal","download_url":"https://codeload.github.com/kiquetal/java-concurrency-modern-2026/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kiquetal%2Fjava-concurrency-modern-2026/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34273788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurrency","java","java-concurrency","java21","jmm","learning","loom","multithreading","structured-concurrency","virtual-threads"],"created_at":"2026-06-13T05:33:37.048Z","updated_at":"2026-06-13T05:33:38.128Z","avatar_url":"https://github.com/kiquetal.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Concurrency Modern 2026\n\nLearning journey through modern Java concurrency, based on:\n\n- **Java Concurrency in Practice** — Brian Goetz et al.\n- **Modern Concurrency in Java** — A N M Bazlur Rahman\n- **Java Structured Concurrency** — Anghel Leonard\n- **Understanding Java Virtual Threads** — Fu Cheng\n\n## Structure\n\n```\ndocs/         → Markdown notes (migrating to Astro later)\ndocs/images/  → Mermaid diagrams (PNG)\nsrc/          → Code examples and demos\nexercises/    → Self-test questions per chapter\n```\n\n## 📚 Notes\n\n| Chapter | Source | Doc |\n| :--- | :--- | :--- |\n| Ch. 3 — Sharing Objects | JCiP | [docs/chapter-iii-shared-objects.md](docs/chapter-iii-shared-objects.md) |\n| Ch. 16 — The Java Memory Model | JCiP | [docs/chapter-xvi-the-java-memory-model.md](docs/chapter-xvi-the-java-memory-model.md) |\n\n## 💻 Code Examples\n\n### Sharing Objects (`dev.concurrency.sharingobjects`)\n\n| File | Topic |\n| :--- | :--- |\n| [GuardedObjectExample](src/main/java/dev/concurrency/sharingobjects/GuardedObjectExample.java) | Guarded-by pattern |\n| [ThreadLocalDemo](src/main/java/dev/concurrency/sharingobjects/ThreadLocalDemo.java) | ThreadLocal usage and cleanup |\n| [SharedThreadSafeExample](src/main/java/dev/concurrency/sharingobjects/SharedThreadSafeExample.java) | Thread-safe shared state |\n| [ImmutableUser](src/main/java/dev/concurrency/sharingobjects/ImmutableUser.java) | Immutability with defensive copies |\n| [TryLockRetryExample](src/main/java/dev/concurrency/sharingobjects/TryLockRetryExample.java) | tryLock with random backoff |\n| [ThreadConfinedExample](src/main/java/dev/concurrency/sharingobjects/ThreadConfinedExample.java) | Thread confinement |\n| [SharedReadOnlyExample](src/main/java/dev/concurrency/sharingobjects/SharedReadOnlyExample.java) | Read-only shared data |\n\n### Memory Model (`dev.concurrency.memorymodel`)\n\n| File | Topic |\n| :--- | :--- |\n| [VolatilePiggybackDemo](src/main/java/dev/concurrency/memorymodel/VolatilePiggybackDemo.java) | Piggybacking visibility on volatile |\n| [SafePublicationDemo](src/main/java/dev/concurrency/memorymodel/SafePublicationDemo.java) | 4 safe publication idioms |\n| [UnsafePublicationDemo](src/main/java/dev/concurrency/memorymodel/UnsafePublicationDemo.java) | Broken singleton + 3 fixes |\n\n## 🧪 Exercises\n\nSelf-test questions organized by chapter — see [exercises/README.md](exercises/README.md).\n\n| Chapter | Questions | Topics |\n| :--- | :--- | :--- |\n| [Ch. III — Shared Objects](exercises/chapter-iii-shared-objects/self-test.md) | 8 | Publication/escape, ThreadLocal, deadlock/livelock |\n| [Ch. XVI — Java Memory Model](exercises/chapter-xvi-the-java-memory-model/self-test.md) | 9 | Piggybacking, safe publication, happens-before, `join()` |\n\n## 🖼️ Diagrams\n\n| Diagram | Topic |\n| :--- | :--- |\n| [happens-before-visibility](docs/images/happens-before-visibility.png) | Happens-before visibility between threads |\n| [join-happens-before-chain](docs/images/join-happens-before-chain.png) | `join()` happens-before chain (Writer → Main → Reader) |\n| [join-does-not-order-threads](docs/images/join-does-not-order-threads.png) | `join()` does NOT order threads relative to each other |\n| [join-as-happens-before](docs/images/join-as-happens-before.png) | `join()` as a happens-before edge |\n| [join-vs-safe-publication](docs/images/join-vs-safe-publication.png) | `join()` vs safe publication mechanisms |\n| [static-initializer-vs-static-method](docs/images/static-initializer-vs-static-method.png) | `static final` (class loading) vs `static` method (no sync) |\n| [trylock-retry-sequence](docs/images/trylock-retry-sequence.png) | tryLock retry with random backoff sequence |\n\n## 🗺️ Chronological Study Plan\n\n### Phase I: Foundations (The Physics)\n- [x] **Java Concurrency in Practice** (JCiP)\n  - Ch. 3: Sharing Objects\n  - Ch. 16: The Java Memory Model\n\n### Phase II: The Mechanics (The Shift)\n- [ ] **Modern Concurrency in Java** (Bazlur Rahman)\n  - Ch. 4: Virtual Threads ← start here (practical \"what and how\")\n  - Ch. 7: Carrier Thread Pinning ← read after Fu Cheng (makes mechanical sense)\n- [ ] **Understanding Java Virtual Threads** (Fu Cheng)\n  - The Scheduler \u0026 Continuations ← read between Ch.4 and Ch.7 (the \"why\")\n\n### Phase III: The Architecture (Patterns)\n- [ ] **Java Structured Concurrency** (Anghel Leonard)\n  - Ch. 2: StructuredTaskScope\n  - Ch. 5: Scoped Values\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiquetal%2Fjava-concurrency-modern-2026","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkiquetal%2Fjava-concurrency-modern-2026","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkiquetal%2Fjava-concurrency-modern-2026/lists"}