Java
Beginner
1 min read
ExecutorService and Thread Pools
Example
import java.util.*;
import java.util.concurrent.*;
public class ExecutorServiceDemo {
static int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
// Fixed thread pool with 3 workers
ExecutorService executor = Executors.newFixedThreadPool(3);
// Submit Callable tasks that return results
List<Future<Integer>> futures = new ArrayList<>();
int[] inputs = {10, 15, 20, 25, 30};
for (int n : inputs) {
Future<Integer> future = executor.submit(() -> fibonacci(n));
futures.add(future);
}
// Collect results
for (int i = 0; i < inputs.length; i++) {
try {
int result = futures.get(i).get(5, TimeUnit.SECONDS);
System.out.printf("fibonacci(%d) = %d%n", inputs[i], result);
} catch (TimeoutException e) {
System.out.println("Task " + i + " timed out");
futures.get(i).cancel(true);
}
}
// Proper shutdown
executor.shutdown();
boolean done = executor.awaitTermination(10, TimeUnit.SECONDS);
System.out.println("Executor terminated cleanly: " + done);
// ScheduledExecutorService example
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(
() -> System.out.println("Tick at " + System.currentTimeMillis()),
0, 200, TimeUnit.MILLISECONDS);
Thread.sleep(700);
scheduler.shutdownNow();
}
}