Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
ForkJoin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mohamadbashar.disoki
ForkJoin
Commits
2c4c5e9f
Commit
2c4c5e9f
authored
2 years ago
by
Mohamad Bashar Desoki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
05. ArraySum Fork/Join
parent
5edc7e7b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
128 additions
and
0 deletions
+128
-0
README.md
README.md
+3
-0
ArraySum.java
src/main/java/ArraySum.java
+53
-0
ArraySumTest.java
src/test/java/ArraySumTest.java
+72
-0
No files found.
README.md
View file @
2c4c5e9f
...
...
@@ -11,6 +11,9 @@
*
Create FixedThreadPool
*
Create ScheduledThreadPool
### Introduce to ForkJoin Framework
*
ArraySum using Recursive Action
### Acknowledgments
Inspiration, code snippets, etc.
*
[
Java - MultiThreading
](
https://www.youtube.com/watch?v=9DvDheKRJ9Y&t=656s
)
...
...
This diff is collapsed.
Click to expand it.
src/main/java/ArraySum.java
0 → 100644
View file @
2c4c5e9f
import
java.util.Arrays
;
import
java.util.concurrent.RecursiveAction
;
public
class
ArraySum
extends
RecursiveAction
{
public
long
sum
;
int
arr
[],
lo
,
hi
;
public
ArraySum
(
int
[]
arr
,
int
lo
,
int
hi
)
{
this
.
arr
=
arr
;
this
.
lo
=
lo
;
this
.
hi
=
hi
;
}
public
long
computeSeq
()
{
// if(lo == hi)
// return arr[lo];
// else {
// int mid = (lo + hi) / 2;
// ArraySum left = new ArraySum(arr, lo, mid);
// ArraySum right = new ArraySum(arr, mid + 1, hi);
//
// return left.computeSeq()+ right.computeSeq();
// }
for
(
int
i
=
lo
;
i
<=
hi
;
++
i
)
{
sum
+=
arr
[
i
];
}
return
sum
;
}
@Override
protected
void
compute
()
{
if
(
hi
-
lo
>
1_000_000
)
{
int
mid
=
(
lo
+
hi
)
/
2
;
ArraySum
left
=
new
ArraySum
(
arr
,
lo
,
mid
);
ArraySum
right
=
new
ArraySum
(
arr
,
mid
+
1
,
hi
);
left
.
fork
();
right
.
compute
();
left
.
join
();
sum
=
left
.
sum
+
right
.
sum
;
}
else
{
// sum =computeSeq();
for
(
int
i
=
lo
;
i
<=
hi
;
++
i
)
{
sum
+=
arr
[
i
];
}
}
}
public
void
computeStream
()
{
sum
=
Arrays
.
stream
(
arr
).
asLongStream
().
parallel
().
sum
();
// all the intermediate and final operation run in parallel
// Introduce to Map Reduce pattern credit to java streams
}
}
This diff is collapsed.
Click to expand it.
src/test/java/ArraySumTest.java
0 → 100644
View file @
2c4c5e9f
import
junit.framework.TestCase
;
import
java.util.Random
;
import
java.util.concurrent.ForkJoinPool
;
import
java.util.stream.IntStream
;
public
class
ArraySumTest
extends
TestCase
{
private
int
[]
randomArray
(
int
size
)
{
Random
rand
=
new
Random
();
int
[]
arr
=
new
int
[
size
];
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
arr
[
i
]
=
rand
.
nextInt
(
size
);
}
/* Check random array
Arrays.stream(arr).forEach(System.out::println);*/
return
arr
;
}
private
int
[]
intStream
(
int
size
)
{
IntStream
intStream
=
IntStream
.
range
(
1
,
size
);
return
intStream
.
toArray
();
}
public
void
testArraySumSeq
()
{
int
size
=
1000_000_000
;
int
[]
arr
=
intStream
(
size
);
ArraySum
array
=
new
ArraySum
(
arr
,
0
,
arr
.
length
-
1
);
long
start
=
System
.
currentTimeMillis
();
long
sum
=
array
.
computeSeq
();
long
endTimer
=
System
.
currentTimeMillis
()
-
start
;
System
.
out
.
printf
(
"Sequential Time execution for Random Array of size %d is %d sum is %d\n"
,
size
,
endTimer
,
sum
);
// assertEquals(15,res);
}
public
void
testArraySumPP
()
{
System
.
setProperty
(
"java.util.concurrent.ForkJoinPool.common.parallelism"
,
"7"
);
int
size
=
1000_000_000
;
int
[]
arr
=
intStream
(
size
);
ArraySum
array
=
new
ArraySum
(
arr
,
0
,
arr
.
length
-
1
);
long
start
=
System
.
currentTimeMillis
();
ForkJoinPool
.
commonPool
().
invoke
(
array
);
long
endTimer
=
System
.
currentTimeMillis
()
-
start
;
System
.
out
.
printf
(
"Parallel Time execution for Random Array of size %d is %d ms sum is %d\n"
,
size
,
endTimer
,
array
.
sum
);
// assertEquals(15,res);
}
public
void
testArraySumStream
()
{
System
.
setProperty
(
"java.util.concurrent.ForkJoinPool.common.parallelism"
,
"7"
);
int
size
=
1000_000_000
;
int
[]
arr
=
intStream
(
size
);
ArraySum
array
=
new
ArraySum
(
arr
,
0
,
arr
.
length
-
1
);
long
start
=
System
.
currentTimeMillis
();
array
.
computeStream
();
long
endTimer
=
System
.
currentTimeMillis
()
-
start
;
System
.
out
.
printf
(
"Parallel Stream Time execution for Random Array of size %d is %d ms sum is %d\n"
,
size
,
endTimer
,
array
.
sum
);
// assertEquals(15,res);
}
public
void
resource
()
{
System
.
out
.
println
(
Runtime
.
getRuntime
().
availableProcessors
());
System
.
out
.
println
(
ForkJoinPool
.
commonPool
().
getParallelism
());
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment