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 selects

  • Programmer-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.

Table of contents