Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /