What are best practices for working with Callable and Future?

Best practices for working with Callable and Future in Java include ensuring proper exception handling, minimizing shared state, and using the framework's features wisely to manage concurrency effectively.

Callable, Future, Java, concurrency, multithreading, best practices, exception handling

import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class CallableExample { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(2); Callable task = () -> { // Simulate some long-running task Thread.sleep(2000); return 42; // Return a result }; Future future = executor.submit(task); try { // Perform other operations, then retrieve the result Integer result = future.get(); // This will block until the result is available System.out.println("Result of the callable: " + result); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } finally { executor.shutdown(); } } }

Callable Future Java concurrency multithreading best practices exception handling