Returning a value from Runnable Returning a value from Runnable java java

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