title: Difference between CompletableFuture, Future and RxJava's Observable
body: <p>I would like to know the difference between 
  <code>CompletableFuture</code>,<code>Future</code> and <code>Observable</code> <code>RxJava</code>.</p>
  
  <p>What I know is all are asynchronous but </p>
  
  <p><code>Future.get()</code> blocks the thread </p>
  
  <p><code>CompletableFuture</code> gives the callback methods</p>
  
  <p><code>RxJava Observable</code> --- similar to <code>CompletableFuture</code> with other benefits(not sure)</p>
  
  <p>For example: if client needs to make multiple service calls and when we use <code>Futures</code> (Java) <code>Future.get()</code> will be executed sequentially...would like to know how its better in RxJava..</p>
  
  <p>And the documentation <a href="http://reactivex.io/intro.html" rel="noreferrer">http://reactivex.io/intro.html</a> says </p>
  
  <p><strong>It is difficult to use Futures to optimally compose conditional asynchronous execution flows (or impossible, since latencies of each request vary at runtime). This can be done, of course, but it quickly becomes complicated (and thus error-prone) or it prematurely blocks on Future.get(), which eliminates the benefit of asynchronous execution.</strong></p>
  
  <p>Really interested to know how <code>RxJava</code> solves this problem. I found it difficult to understand from the documentation.</p>