summaryrefslogtreecommitdiff
path: root/graphs/java/threadForkJoin
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
commitc9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch)
tree3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/java/threadForkJoin
add: graphs et rushs
Diffstat (limited to 'graphs/java/threadForkJoin')
-rw-r--r--graphs/java/threadForkJoin/.gitignore38
-rw-r--r--graphs/java/threadForkJoin/pom.xml133
-rw-r--r--graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java49
-rw-r--r--graphs/java/threadForkJoin/src/test/java/fr/epita/assistants/forkjoin/RecursiveTaskTest.java34
4 files changed, 254 insertions, 0 deletions
diff --git a/graphs/java/threadForkJoin/.gitignore b/graphs/java/threadForkJoin/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/graphs/java/threadForkJoin/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store \ No newline at end of file
diff --git a/graphs/java/threadForkJoin/pom.xml b/graphs/java/threadForkJoin/pom.xml
new file mode 100644
index 0000000..8e857e4
--- /dev/null
+++ b/graphs/java/threadForkJoin/pom.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>fr.epita.assistants</groupId>
+ <artifactId>threadForkJoin</artifactId>
+ <version>1.0</version>
+
+ <properties>
+ <versions.java>21</versions.java>
+ <versions.junit>5.9.1</versions.junit>
+ <versions.maven-compiler-plugin>3.13.0</versions.maven-compiler-plugin>
+ <versions.maven-surefire-plugin>3.5.0</versions.maven-surefire-plugin>
+ <versions.maven-jar-plugin>3.1.1</versions.maven-jar-plugin>
+ <versions.maven-install-plugin>3.1.0</versions.maven-install-plugin>
+
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+ <surefire.reportsDirectory>${project.build.directory}/surefire-reports</surefire.reportsDirectory>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <version>${versions.junit}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit-platform</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>3.9.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.9.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-monitor</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0.24</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-filtering</artifactId>
+ <version>3.3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-interpolation</artifactId>
+ <version>1.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-profile</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-registry</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-repository-metadata</artifactId>
+ <version>2.2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>classworlds</groupId>
+ <artifactId>classworlds</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ <version>1.9.3</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${versions.maven-compiler-plugin}</version>
+ <configuration>
+ <source>${versions.java}</source>
+ <target>${versions.java}</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>${versions.maven-install-plugin}</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${versions.maven-surefire-plugin}</version>
+ <configuration>
+ <reportsDirectory>${surefire.reportsDirectory}</reportsDirectory>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java b/graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java
new file mode 100644
index 0000000..5934f92
--- /dev/null
+++ b/graphs/java/threadForkJoin/src/main/java/fr/epita/assistants/forkjoin/MyRecursiveTask.java
@@ -0,0 +1,49 @@
+package fr.epita.assistants.forkjoin;
+
+import java.util.concurrent.ForkJoinTask;
+import java.util.concurrent.RecursiveTask;
+
+public class MyRecursiveTask extends RecursiveTask<Double> {
+ final private double[][] matrix;
+ final private int xLowerBound;
+ final private int xUpperBound;
+ final private int yLowerBound;
+ final private int yUpperBound;
+
+ public MyRecursiveTask(double[][] matrix, int xLowerBound, int xUpperBound, int yLowerBound, int yUpperBound) {
+ this.matrix = matrix;
+ this.xLowerBound = xLowerBound;
+ this.xUpperBound = xUpperBound;
+ this.yLowerBound = yLowerBound;
+ this.yUpperBound = yUpperBound;
+ }
+
+ @Override
+ protected Double compute() {
+ if (xUpperBound - xLowerBound <= 5 && yUpperBound - yLowerBound <= 5) {
+ Double avg = 0.0;
+ for (int j = yLowerBound; j < yUpperBound; j++) {
+ for (int i = xLowerBound; i < xUpperBound; i++) {
+ avg += matrix[j][i];
+ }
+ }
+ if ((xUpperBound - xLowerBound) * (yUpperBound - yLowerBound) == 0)
+ return 0.0;
+ return avg / ((xUpperBound - xLowerBound) * (yUpperBound - yLowerBound));
+ } else {
+ MyRecursiveTask t1 = new MyRecursiveTask(matrix, xLowerBound, xLowerBound + (xUpperBound - xLowerBound) / 2,
+ yLowerBound, yLowerBound + (yUpperBound - yLowerBound) / 2);
+ MyRecursiveTask t2 = new MyRecursiveTask(matrix, xLowerBound + (xUpperBound - xLowerBound) / 2, xUpperBound,
+ yLowerBound, yLowerBound + (yUpperBound - yLowerBound) / 2);
+ MyRecursiveTask t3 = new MyRecursiveTask(matrix, xLowerBound, xLowerBound + (xUpperBound - xLowerBound) / 2,
+ yLowerBound + (yUpperBound - yLowerBound) / 2, yUpperBound);
+ MyRecursiveTask t4 = new MyRecursiveTask(matrix, xLowerBound + (xUpperBound - xLowerBound) / 2, xUpperBound,
+ yLowerBound + (yUpperBound - yLowerBound) / 2, yUpperBound);
+ t1.fork();
+ t2.fork();
+ t3.fork();
+ t4.fork();
+ return (t1.join() + t2.join() + t3.join() + t4.join()) / 4;
+ }
+ }
+} \ No newline at end of file
diff --git a/graphs/java/threadForkJoin/src/test/java/fr/epita/assistants/forkjoin/RecursiveTaskTest.java b/graphs/java/threadForkJoin/src/test/java/fr/epita/assistants/forkjoin/RecursiveTaskTest.java
new file mode 100644
index 0000000..c8f6877
--- /dev/null
+++ b/graphs/java/threadForkJoin/src/test/java/fr/epita/assistants/forkjoin/RecursiveTaskTest.java
@@ -0,0 +1,34 @@
+package fr.epita.assistants.forkjoin;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@Timeout(1)
+public class RecursiveTaskTest {
+ @Test
+ void exampleTest() {
+ // Create a Matrix
+ double[][] matrix = new double[][]{
+ new double[]{10, 52, 100, 50, 74, 25},
+ new double[]{10, 52, 100, 50, 74, 25},
+ new double[]{10, 52, 100, 50, 74, 25},
+ new double[]{10, 52, 100, 50, 74, 25},
+ new double[]{10, 52, 100, 50, 74, 25},
+ new double[]{10, 52, 100, 50, 74, 25}
+ };
+ double expected = 51.83;
+
+ MyRecursiveTask mrt = new MyRecursiveTask(matrix, 0, matrix[0].length, 0, matrix.length);
+
+ // Fork and join task
+ mrt.fork();
+ double got = mrt.join();
+
+ // Need delta because of 'double' type
+ assertEquals(expected, got, 0.01);
+ }
+
+ // Write your tests here ...
+}