Jox
Virtual-thread based safe concurrency & streaming for Java 21. Open-source, Apache2 licensed.
Jox contains three main modules:
Fast & scalable, completable channels, with Go-like
select
sProgrammer-friendly structured concurrency
Finite & infinite streaming using flows, with reactive streams compatibility, (blocking) I/O integration and a high-level, “functional” API
Source code is avaiable on GitHub.
A tour of Jox
Selectable channels:
var ch1 = Channel.<Integer>newBufferedDefaultChannel();
var ch2 = Channel.<Integer>newBufferedDefaultChannel();
var ch3 = Channel.<Integer>newBufferedDefaultChannel();
// send a value to two channels
ch2.send(29);
ch3.send(32);
var received = select(ch1.receiveClause(), ch2.receiveClause(), ch3.receiveClause());
A flow with time-based & parallel processing:
var nats =
Flows.unfold(0, i -> Optional.of(Map.entry(i+1, i+1)));
Flows.range(1, 100, 1)
.throttle(1, Duration.ofSeconds(1))
.mapPar(4, i -> {
Thread.sleep(5000);
var j = i*3;
return j+1;
})
.filter(i -> i % 2 == 0)
.zip(nats)
.runForeach(System.out::println);
Sructured concurrency scope:
var result = supervised(scope -> {
var f1 = scope.fork(() -> {
Thread.sleep(500);
return 5;
});
var f2 = scope.fork(() -> {
Thread.sleep(1000);
return 6;
});
return f1.join() + f2.join();
});
System.out.println("result = " + result);
Sponsors
Development and maintenance of Jox is sponsored by SoftwareMill, a software development and consulting company. We help clients scale their business through software. Our areas of expertise include performant backends, distributed systems, integrating data pipelines and ML/AI “science as a service”.
Commercial Support
We offer commercial support for Jox and related technologies, as well as development services. Contact us to learn more about our offer!
Other materials
Articles:
Videos:
For a Scala version, see the Ox project.