Skip to content

Commit 553f9db

Browse files
committed
Add example of joining threads
1 parent a633eba commit 553f9db

File tree

3 files changed

+82
-1
lines changed

3 files changed

+82
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ Simple and easy to understand code examples for most of the Concurrent APIs prov
66
#### All about Threads
77
- [Motivation - Why do we need Threads?](./notes/threads-motivation.md)
88
- [Threads in Java](./src/com/codecafe/concurrency/thread)
9-
- [Creating Threads](./notes/creating-threads.md) using
9+
- [Creating Threads](./notes/creating-threads.md) using:
1010
- [Runnable](./src/com/codecafe/concurrency/thread/basics/designathread/ThreadDemo.java)
1111
- [Thread class](./src/com/codecafe/concurrency/thread/basics/designathread/ThreadDemo.java)
1212
- [Callable](./src/com/codecafe/concurrency/thread/basics/designathread/CallableDemo.java)
1313
- [ExecutorService](notes/executorservice.md) - [[code](./src/com/codecafe/concurrency/executorservice/ExecutorServiceDemo.java)]
1414
- [Thread States](./notes/thread-states.md) - [[code](./src/com/codecafe/concurrency/thread/basics/designathread/ThreadStates.java)]
1515
- [Thread Termination](./src/com/codecafe/concurrency/thread/basics/Main.java)
16+
- [Joining Threads](./src/com/codecafe/concurrency/thread/joiningthreads/Main.java)
1617
- [Thread Signalling](./src/com/codecafe/concurrency/threadsignalling)
1718
- [Daemon Threads](./notes/daemon-threads.md) - [[code](./src/com/codecafe/concurrency/thread/daemonthreads/Main.java)]
1819

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.codecafe.concurrency.thread.joiningthreads;
2+
3+
import java.math.BigInteger;
4+
5+
public class FactorialTask implements Runnable {
6+
7+
private final long number;
8+
private BigInteger result = BigInteger.ZERO;
9+
private boolean isFinished = false;
10+
11+
public FactorialTask(long number) {
12+
this.number = number;
13+
}
14+
15+
@Override
16+
public void run() {
17+
this.result = factorial(number);
18+
this.isFinished = true;
19+
}
20+
21+
public BigInteger factorial(long n) {
22+
BigInteger tempResult = BigInteger.ONE;
23+
24+
for (long i = n; i > 0; i--) {
25+
tempResult = tempResult.multiply(new BigInteger(Long.toBinaryString(i)));
26+
}
27+
28+
return tempResult;
29+
}
30+
31+
public boolean isFinished() {
32+
return isFinished;
33+
}
34+
35+
public BigInteger getResult() {
36+
return result;
37+
}
38+
39+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.codecafe.concurrency.thread.joiningthreads;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class Main {
7+
8+
public static void main(String[] args) throws InterruptedException {
9+
List<Long> numbers = List.of(0L, 5653L, 9090L, 30467L, 27L, 2276L);
10+
11+
List<FactorialTask> factorialTasks = new ArrayList<>();
12+
List<Thread> factorialThreads = new ArrayList<>();
13+
14+
for (long number : numbers) {
15+
factorialTasks.add(new FactorialTask(number));
16+
}
17+
18+
for (FactorialTask factorialTask : factorialTasks) {
19+
factorialThreads.add(new Thread(factorialTask));
20+
}
21+
22+
for (Thread th : factorialThreads) {
23+
th.start();
24+
}
25+
26+
for (Thread th : factorialThreads) {
27+
th.join(2000);
28+
}
29+
30+
for (int i = 0; i < numbers.size(); i++) {
31+
FactorialTask factorialTask = factorialTasks.get(i);
32+
33+
if (factorialTask.isFinished()) {
34+
System.out.println("Factorial of " + numbers.get(i) + " is " + factorialTask.getResult());
35+
} else {
36+
System.out.println("The calculation for " + numbers.get(i) + " is still in progress");
37+
}
38+
}
39+
}
40+
41+
}

0 commit comments

Comments
 (0)