title: Can only do 4 concurrent futures as maximum in Scala
body: <p>I thought that using futures would easily allow me to to fire off one shot code blocks, however it seems I can only have 4 futures at a time.</p>
  
  <p>Where does this restriction come from, or am I abusing Futures by using it like this?</p>
  
  <pre><code>import scala.concurrent._
  import ExecutionContext.Implicits.global
  import scala.util.{Failure, Success}
  import java.util.Calendar
  
  object Main extends App{
  
    val rand = scala.util.Random
  
    for (x &lt;- 1 to 100) {
      val f = Future {
        //val sleepTime =  rand.nextInt(1000)
        val sleepTime =  2000
        Thread.sleep(sleepTime)
  
        val today = Calendar.getInstance().getTime()
        println("Future: " + x + " - sleep was: " + sleepTime + " - " + today)
        1;
      }
    }
  
    Thread.sleep(10000)
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>Future: 3 - sleep was: 2000 - Mon Aug 31 10:02:44 CEST 2015
  Future: 2 - sleep was: 2000 - Mon Aug 31 10:02:44 CEST 2015
  Future: 4 - sleep was: 2000 - Mon Aug 31 10:02:44 CEST 2015
  Future: 1 - sleep was: 2000 - Mon Aug 31 10:02:44 CEST 2015
  Future: 7 - sleep was: 2000 - Mon Aug 31 10:02:46 CEST 2015
  Future: 5 - sleep was: 2000 - Mon Aug 31 10:02:46 CEST 2015
  Future: 6 - sleep was: 2000 - Mon Aug 31 10:02:46 CEST 2015
  Future: 8 - sleep was: 2000 - Mon Aug 31 10:02:46 CEST 2015
  Future: 9 - sleep was: 2000 - Mon Aug 31 10:02:48 CEST 2015
  Future: 11 - sleep was: 2000 - Mon Aug 31 10:02:48 CEST 2015
  Future: 10 - sleep was: 2000 - Mon Aug 31 10:02:48 CEST 2015
  Future: 12 - sleep was: 2000 - Mon Aug 31 10:02:48 CEST 2015
  Future: 16 - sleep was: 2000 - Mon Aug 31 10:02:50 CEST 2015
  Future: 13 - sleep was: 2000 - Mon Aug 31 10:02:50 CEST 2015
  Future: 15 - sleep was: 2000 - Mon Aug 31 10:02:50 CEST 2015
  Future: 14 - sleep was: 2000 - Mon Aug 31 10:02:50 CEST 2015
  </code></pre>
  
  <p>I expected them to all show the same time.</p>
  
  <p>To give some context, I thought I could use this construct and extend it by having a main loop, in which it sleeps every loop according to a value drawn from a exponential disitribution , to emulate user arrival/execution of a query. After each sleep I'd like to execute the query by sending it to the program's driver (in this case Spark, and the driver allows for multiple threads using it.) Is there a more obvious way than to use Futures?</p>