How to use Callable with void return type? How to use Callable with void return type? multithreading multithreading

How to use Callable with void return type?


You can use java.lang.Thread for parallel execution. However, in most cases it's easier to use an java.util.concurrent.ExecutorService. The latter provides a method to submit a Callable and returns a Future to get the result later (or wait for completion).

If testA.abc() and testB.xyz() should be executed in parallel, you use the ExecutorService to execute the former in a separate thread whereas the latter is executed in the original thread. Then you wait for the completion of the former for synchronization.

ExecutorService executor = ... // e.g. Executors.newFixedThreadPool(4);Future<Void> future = executor.submit(new Callable<Void>() {    public Void call() throws Exception {        testA.abc();        return null;    }});testB.xyz();future.get(); // wait for completion of testA.abc()


Why would you need a void for running something in Parallel? For one, if you don't need the return value, you can simply return null.

To make something parallel you need to use threading/scheduling. I would personally recommend avoiding Callables, and using Runnables instead (and hey, no return value).


A shorter version:

ExecutorService executor = ... // e.g. Executors.newFixedThreadPool(4);Future<?> future = executor.submit(() -> testA.abc());testB.xyz();future.get(); // wait for completion of testA.abc()

To be noted that having to run something in parallel with nothing to be returned could be a sign of a bad pattern :)

Also, if you are in a Spring environment, you could use: https://spring.io/guides/gs/async-method/