Async Reactive is a broad Java 17 playground for asynchronous and reactive programming. It starts with the lower-level building blocks of callbacks, callables, futures, and CompletableFuture, then moves into a much larger RxJava section that explores observables, operators, multicasting, subjects, scheduling, and concurrency.
The material is organized as a progression rather than a single app:
basics/for callback, callable, and future-based examplescompletable_futures/for creation, composition, coordination, exception handling, timeouts, and async versus sync executionrxjava/for a large set of focused RxJava examples
Inside the RxJava section, the project goes well beyond the intro material. The packages cover:
- observable and observer basics
- factory methods and stream creation
Single,Maybe, andCompletable- disposal and subscription lifecycle management
- transforming, suppressing, reducing, and collecting operators
- combining observables with
zip,merge,concat,flatMap, and related operators - multicasting, replaying, caching, and sharing
- subjects such as
PublishSubject,BehaviorSubject,ReplaySubject,AsyncSubject, andUnicastSubject - concurrency and scheduler behavior, including computation, single-thread, and new-thread schedulers
This is not just a small RxJava demo project. It captures the transition from classic asynchronous Java techniques to more composable reactive flows. That makes it useful both as a learning path and as a reference shelf when you want to quickly remember how a specific operator or scheduling pattern behaves.
The project also includes a typescript/ subproject with local TypeScript tooling via typescript and ts-node. That companion area makes sense in the context of reactive and async learning because it gives you a place to contrast Java patterns with the equivalent JavaScript or TypeScript event-driven style.
Build the Java examples from the project root with Maven:
mvn packageRun individual demo classes from your IDE or preferred Java runner.
For the TypeScript companion workspace:
cd typescript
npm installAsync Reactive is valuable because it keeps several generations of Java async thinking in one place. You can move from futures, to CompletableFuture, to RxJava streams and schedulers without switching repositories or mental context. That makes it a strong reference project for understanding how asynchronous composition in Java gets progressively more expressive.