{"id":21633730,"url":"https://github.com/dgroomes/java-concurrency-playground","last_synced_at":"2026-01-30T11:18:04.948Z","repository":{"id":146627108,"uuid":"207028095","full_name":"dgroomes/java-concurrency-playground","owner":"dgroomes","description":"📚 Learning and exploring concurrency in Java","archived":false,"fork":false,"pushed_at":"2024-11-17T01:31:37.000Z","size":192,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-25T11:39:06.507Z","etag":null,"topics":["completable-future","java","java-concurrency"],"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/dgroomes.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}},"created_at":"2019-09-07T21:32:20.000Z","updated_at":"2024-11-17T01:31:41.000Z","dependencies_parsed_at":"2023-12-22T19:29:25.382Z","dependency_job_id":"b5c9a41e-e4ec-49ef-ac25-8107a73e7936","html_url":"https://github.com/dgroomes/java-concurrency-playground","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Fjava-concurrency-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Fjava-concurrency-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Fjava-concurrency-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroomes%2Fjava-concurrency-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dgroomes","download_url":"https://codeload.github.com/dgroomes/java-concurrency-playground/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248430693,"owners_count":21102062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["completable-future","java","java-concurrency"],"created_at":"2024-11-25T03:13:38.194Z","updated_at":"2026-01-30T11:18:04.943Z","avatar_url":"https://github.com/dgroomes.png","language":"Java","readme":"# java-concurrency-playground\n\n📚 Learning and exploring concurrency in Java.\n\n\n## Standalone subprojects\n\nThis repository illustrates different concepts, patterns and examples via standalone subprojects. Each subproject is\ncompletely independent of the others and do not depend on the root project. This _standalone subproject constraint_\nforces the subprojects to be complete and maximizes the reader's chances of successfully running, understanding, and\nre-using the code.\n\nThe subprojects include:\n\n\n### `virtual-threads/`\n\nA simple demonstration of virtual threads. \n\nSee the README in [virtual-threads/](virtual-threads/).\n\n\n### `interrupts/`\n\nLearning about interrupts \u003chttps://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html\u003e.\n\nSee the README in [interrupts/](interrupts/).\n\n\n### `completable-future/`\n\nSimulate the execution of long-running work and show the power of `CompletableFuture` to execute that work concurrently.\n\nSee the README in [completable-future/](completable-future/).\n\n\n### `timer/`\n\nLearning about `java.util.Timer` \u003chttps://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Timer.html\u003e.\nand related APIs.\n\nSee the README in [timer/](timer/).\n\n\n### `signals/`\n\nLearning how signals, like `SIGINT`, are handled by a Java program.\n\nSee the README in [signals/](signals/).\n\n\n## Wish List\n\nGeneral clean-ups, TODOs and things I wish to implement for this project:\n\n- [x] DONE Rename `loom` to `virtual-threads`\n- [x] DONE Configure `loom/virtual-threads` as a Gradle subproject\n- [x] DONE Upgrade to Gradle 8.5\n- [x] DONE Upgrade to Java 21\n- [x] DONE Unnest the `src/main/java` dirs in the non-Gradle native projects. We're only using Gradle as a way for the IDE\n  to understand the project structure, but I don't want to pay the price of having to have a `src/main/java` dir in these\n  projects.\n- [x] DONE Move `mock-api` to my `wiremock-playground` repo. I originally included it here as a way to explore completable futures\n  with a workload I was familiar with in real work, but I can de-scope it now and instead create an in-process mock API\n  using timers or something. Or better yet sleeps and virtual threads.\n- [ ] Show how to use `sun.misc.Signal` instead of just a shutdown hook. While the `sun` package feels like an overall\n  no-no because of the name plus the very frowned-upon `sun.misc.Unsafe`, `sun.misc.Signal` is a well-implemented,\n  reasonable, and platform-independent thing/API and it's doubtful that it will be wholesale removed. I think there's\n  just not enough motivation to change it. Maybe they'll move it to a different package some day. Either way, the API is\n  great.\n- [ ] IN PROGRESS \"Buffering flush\" example\n    - I want something like the buffering you get with BufferedWriter, but I want it for two \"channels\" so to speak.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgroomes%2Fjava-concurrency-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdgroomes%2Fjava-concurrency-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgroomes%2Fjava-concurrency-playground/lists"}