CompletableFuture supplyAsync : <p>I've just started exploring some concurrency features of Java 8. One thing confused me a bit is these two static methods:</p>

<pre><code>CompletableFuture&lt;Void&gt; runAsync(Runnable runnable) 
CompletableFuture&lt;U&gt; supplyAsync(Supplier&lt;U&gt; supplier)
</code></pre>

<p>Do anyone know why they choose to use interface Supplier? Isn't it more natural to use Callable, which is the analogy of Runnable that returns a value? Is that because Supplier doesn't throw an Exception that couldn't be handled?</p>
