Virtual-thread based safe concurrency & streaming for Java 21+.
Includes:
- Fast & scalable, completable channels, with Go-like
select
s - Programmer-friendly structured concurrency
- Finite & infinite streaming using flows, with reactive streams compatibility, (blocking) I/O integration and a high-level, “functional” API
Find out more in the documentation available at jox.softwaremill.com.
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 push-based, backpressured 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);
Is what we are looking for!
Let us know in the issues, or our community forum.
We offer commercial development services. Contact us to learn more!
Jox uses the spotless maven plugin to format code. The formatting is automatically applied during compilation.
Formatting can be checked using mvn spotless:check
and applied with mvn spotless:apply
.
When using VS Code, format-on-save should be disabled (see the pom.xml). For IntelliJ, it might be necessary to install the spotless plugin to properly reformat the sources.
Copyright (C) 2023-2025 SoftwareMill https://softwaremill.com.