<dependency>
<groupId>org.scalaz</groupId>
<artifactId>scalaz-concurrent_2.13</artifactId>
<version>7.3.5</version>
</dependency>
import scalaz.concurrent.Future;
import scalaz.concurrent.Promise;
import scalaz.concurrent.Task;
import scalaz.concurrent.Strategy;
public class ConcurrentExample {
public static void main(String[] args) {
Promise<Integer> promise = Promise.apply();
Task<Integer> task1 = Task.fork(() -> calculateSquare(5));
Task<Integer> task2 = Task.fork(() -> calculateCube(3));
Task<Integer> combinedTask = task1.flatMap(result1 -> task2.map(result2 -> result1 + result2));
combinedTask.runAsync(promise::fulfill);
promise.get().forEach(System.out::println);
}
private static int calculateSquare(int number) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return number * number;
}
private static int calculateCube(int number) {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return number * number * number;
}
}