Returning a value from Runnable
Use Callable<V>
instead of using Runnable
interface.
Example:
public static void main(String args[]) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(3); Set<Future<Integer>> set = new HashSet<>(); for (String word : args) { Callable<Integer> callable = new WordLengthCallable(word); Future<Integer> future = pool.submit(callable); set.add(future); } int sum = 0; for (Future<Integer> future : set) { sum += future.get(); } System.out.printf("The sum of lengths is %s%n", sum); System.exit(sum);}
In this example, you will also need to implement the class WordLengthCallable
, which implements the Callable
interface.
public void check() { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> result = executor.submit(new Callable<Integer>() { public Integer call() throws Exception { return 10; } }); try { int returnValue = result.get(); } catch (Exception exception) { //handle exception }}
Have a look at the Callable class. This is usually submited via an executor service
It can return a future object which is returned when the thread completes