title: CompletableFuture supplyAsync
body: <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>