ExecutorService.submit(Task) vs CompletableFuture.supplyAsync(Task, Executor)
<p>To run some stuff in parallel or asynchronously I can use either an ExecutorService: <code>&lt;T&gt; Future&lt;T&gt; submit(Runnable task, T result);</code> or the CompletableFuture Api:<code>static &lt;U&gt; CompletableFuture&lt;U&gt; supplyAsync(Supplier&lt;U&gt; supplier, Executor executor);</code>
(Lets assume I use in both cases the same Executor)</p>

<p>Besides the return type <code>Future</code> vs. <code>CompletableFuture</code> are there any remarkable differences. Or When to use what?</p>

<p>And what are the differences if I use the <code>CompletableFuture</code> API with default <code>Executor</code> (the method without executor)?</p>