Search code examples
javarunnable

Returning a value from Runnable


The run method of Runnable has return type void and cannot return a value. I wonder however if there is any workaround of this.

I have a method like this:

public class Endpoint {
    public method() {
       Runnable runcls = new RunnableClass();
       runcls.run()
    }
}

The method run is like this:

public class RunnableClass implements Runnable {
    
    public JaxbResponse response;

    public void run() {
        int id = inputProxy.input(chain);
        response = outputProxy.input();
    }
}

I want to have access to response variable in method. Is this possible?


Solution

  • 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.