Skip to content

softwaremill/jox

Repository files navigation

Jox

Ideas, suggestions, problems, questions CI Maven Central javadoc

Virtual-thread based safe concurrency & streaming for Java 21+.

Includes:

  • 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

Find out more in the documentation available at jox.softwaremill.com.

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 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);

Feedback

Is what we are looking for!

Let us know in the issues, or our community forum.

Project sponsor

We offer commercial development services. Contact us to learn more!

Building & working on Jox

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

Copyright (C) 2023-2025 SoftwareMill https://softwaremill.com.

About

Virtual-thread based safe concurrency & streaming

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5