title: Equivalent of Goroutines in Clojure / Java
body: <p>I recently enjoyed watching the <a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=f6kdp27TYZs" rel="noreferrer">Google IO talk on Go Concurrency patterns</a> </p>
  
  <p>Although the Go approach to concurrency (groutines, communication over channels) is clearly different to Clojure (immutability, manged references, STM), it seemed like the Go approach could still be useful in some circumstances in a Clojure context.</p>
  
  <p>So is there a direct equivalent in Clojure or Java for Go's concurrency primitives (perhaps a library), in particular:</p>
  
  <ul>
  <li><code>channel</code>-like objects that block until a reader and writer are available at both ends</li>
  <li>A <code>select</code>-like construct that can wait for results on multiple channels</li>
  </ul>
  
  <p><strong>P.S.</strong> Perfectly happy with a Java solution since it would be easy to use from Clojure</p>
  
  <p><strong>UPDATE</strong> Since the question was originally asked, Clojure now has <a href="https://github.com/clojure/core.async" rel="noreferrer">core.async</a> which provides all this functionality and more.</p>