title: why does operation.map(launch thread).foreach(join()) work in kotlin?
body: <p>I've been trying to find an explanation on why this works in kotlin:</p>
  
  <pre><code>(1..100).map {
      launch {
          System.out.println("Hello from on ${Thread.currentThread().name}")
          delay(100)
      }
  }.forEach { it.join() }
  </code></pre>
  
  <p>In java this would:</p>
  
  <ol>
  <li>start thread 1</li>
  <li>join thread 1 - and block here, never starting more than 1 thread.</li>
  </ol>
  
  <p>In kotlin this process on multiple threads in parallel.</p>
  
  <p>Why does this work?</p>