Usually you have Callable produce Futures. Basically, if you need to have a background process that returns result, you wrap that process in a class that implements Callable. When you submit the callable for execution, Java returns you a Future that wraps the result of the Callable. You can use the Future to keep track of the Callable, and also get the result of the Callable. So, if you want to create a background process, you need to implement
a) a class that implements Callable
b) a java bean that represents the result of the Callable
It's a little verbose, because it forces you to delineate between between business logic and data. If for some reason you don't want to deliniate and want a quick implementation where the the class that does the background processing also contains the result, you can implement RunnableFuture. It's basically a Runnable (something that does background processing ) and Future(the results of the background processing)
subject: RunnableFuture when would it be a good case to use it?