Skip to content

Commit f18ac21

Browse files
author
Rajeev Kumar Singh
committed
Callables and Futures Examples
1 parent 4e1324f commit f18ac21

File tree

5 files changed

+164
-0
lines changed

5 files changed

+164
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import java.util.concurrent.*;
2+
3+
/**
4+
* Created by rajeevkumarsingh on 11/05/17.
5+
*/
6+
public class FutureAndCallableExample {
7+
public static void main(String[] args) throws InterruptedException, ExecutionException {
8+
ExecutorService executorService = Executors.newSingleThreadExecutor();
9+
10+
Callable<String> callable = () -> {
11+
// Perform some computation
12+
Thread.sleep(2000);
13+
return "Hello from Callable";
14+
};
15+
16+
Future<String> future = executorService.submit(callable);
17+
// This line executes immediately
18+
System.out.println("Do something else while callable is getting executed");
19+
20+
System.out.println("Retrieve the result of the future");
21+
// Future.get() blocks until the result is available
22+
String result = future.get();
23+
System.out.println(result);
24+
25+
executorService.shutdown();
26+
}
27+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import java.util.concurrent.*;
2+
3+
/**
4+
* Created by rajeevkumarsingh on 10/05/17.
5+
*/
6+
public class FutureCancelExample {
7+
public static void main(String[] args) throws InterruptedException, ExecutionException {
8+
ExecutorService executorService = Executors.newSingleThreadExecutor();
9+
10+
Callable<String> callable = () -> {
11+
// Perform some computation
12+
Thread.sleep(2000);
13+
return "Hello from Callable";
14+
};
15+
16+
long startTime = System.nanoTime();
17+
Future<String> future = executorService.submit(callable);
18+
19+
while(!future.isDone()) {
20+
System.out.println("Task is still not done...");
21+
Thread.sleep(200);
22+
double elapsedTimeInSec = (System.nanoTime() - startTime)/1000000000.0;
23+
24+
if(elapsedTimeInSec > 1) {
25+
// cancel future if the elapsed time is more than one second
26+
future.cancel(true);
27+
}
28+
}
29+
30+
// Check if future is cancelled before retrieving the result
31+
if(!future.isCancelled()) {
32+
System.out.println("Task completed! Retrieving the result");
33+
// Future.get() blocks until the result is available
34+
String result = future.get();
35+
System.out.println(result);
36+
} else {
37+
System.out.println("Task was cancelled");
38+
}
39+
executorService.shutdown();
40+
}
41+
42+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import java.util.concurrent.*;
2+
3+
/**
4+
* Created by rajeevkumarsingh on 11/05/17.
5+
*/
6+
public class FutureIsDoneExample {
7+
public static void main(String[] args) throws InterruptedException, ExecutionException {
8+
ExecutorService executorService = Executors.newSingleThreadExecutor();
9+
10+
Future<String> future = executorService.submit(() -> {
11+
Thread.sleep(2000);
12+
return "Hello from Callable";
13+
});
14+
15+
while(!future.isDone()) {
16+
System.out.println("Task is still not done...");
17+
Thread.sleep(200);
18+
}
19+
20+
System.out.println("Task completed! Retrieving the result");
21+
String result = future.get();
22+
System.out.println(result);
23+
24+
executorService.shutdown();
25+
}
26+
27+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import java.util.Arrays;
2+
import java.util.List;
3+
import java.util.concurrent.*;
4+
5+
/**
6+
* Created by rajeevkumarsingh on 10/05/17.
7+
*/
8+
public class InvokeAllExample {
9+
public static void main(String[] args) throws InterruptedException, ExecutionException {
10+
ExecutorService executorService = Executors.newFixedThreadPool(5);
11+
12+
Callable<String> task1 = () -> {
13+
Thread.sleep(2000);
14+
return "Result of Task1";
15+
};
16+
17+
Callable<String> task2 = () -> {
18+
Thread.sleep(1000);
19+
return "Result of Task2";
20+
};
21+
22+
Callable<String> task3 = () -> {
23+
Thread.sleep(5000);
24+
return "Result of Task3";
25+
};
26+
27+
List<Callable<String>> taskList = Arrays.asList(task1, task2, task3);
28+
29+
List<Future<String>> futures = executorService.invokeAll(taskList);
30+
31+
for(Future<String> future: futures) {
32+
// The result is printed only after all the futures are complete. (i.e. after 5 seconds)
33+
System.out.println(future.get());
34+
}
35+
}
36+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import java.util.Arrays;
2+
import java.util.List;
3+
import java.util.concurrent.*;
4+
5+
/**
6+
* Created by rajeevkumarsingh on 10/05/17.
7+
*/
8+
public class InvokeAnyExample {
9+
public static void main(String[] args) throws InterruptedException, ExecutionException {
10+
ExecutorService executorService = Executors.newFixedThreadPool(5);
11+
12+
Callable<String> task1 = () -> {
13+
Thread.sleep(2000);
14+
return "Result of Task1";
15+
};
16+
17+
Callable<String> task2 = () -> {
18+
Thread.sleep(1000);
19+
return "Result of Task2";
20+
};
21+
22+
Callable<String> task3 = () -> {
23+
Thread.sleep(5000);
24+
return "Result of Task3";
25+
};
26+
27+
// Returns the result of the fastest callable. (task2 in this case)
28+
String result = executorService.invokeAny(Arrays.asList(task1, task2, task3));
29+
30+
System.out.println(result);
31+
}
32+
}

0 commit comments

Comments
 (0)