From c0756273cacfa831aa05c341834bef41c9107080 Mon Sep 17 00:00:00 2001 From: Felipe Reis Date: Thu, 26 Jan 2017 17:22:45 -0200 Subject: [PATCH] BAEL-612: Example usage of ForkJoinTask --- .../future/FactorialSquareCalculator.java | 26 +++++++++++++++++++ .../FactorialSquareCalculatorUnitTest.java | 22 ++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java create mode 100644 core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java diff --git a/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java b/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java new file mode 100644 index 0000000000..471072b333 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java @@ -0,0 +1,26 @@ +package com.baeldung.concurrent.future; + +import java.util.concurrent.RecursiveTask; + +public class FactorialSquareCalculator extends RecursiveTask { + private static final long serialVersionUID = 1L; + + final private Integer n; + + public FactorialSquareCalculator(Integer n) { + this.n = n; + } + + @Override + protected Integer compute() { + if (n <= 1) { + return n; + } + + FactorialSquareCalculator calculator = new FactorialSquareCalculator(n - 1); + + calculator.fork(); + + return n * n + calculator.join(); + } +} diff --git a/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java new file mode 100644 index 0000000000..a47c44506d --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.concurrent.future; + +import static org.junit.Assert.assertEquals; + +import java.util.concurrent.ForkJoinPool; + +import org.junit.Test; + +public class FactorialSquareCalculatorUnitTest { + + @Test + public void whenCalculatesFactorialSquare_thenReturnCorrectValue() { + ForkJoinPool forkJoinPool = new ForkJoinPool(); + + FactorialSquareCalculator calculator = new FactorialSquareCalculator(10); + + forkJoinPool.execute(calculator); + + assertEquals("The sum of the squares from 1 to 10 is 385", 385, calculator.join().intValue()); + } + +}