有效利用未来

时间:2014-08-07 10:53:47

标签: multithreading scala playframework thread-safety future

这些方法之间是否存在差异?

val upload = for {
              done <- Future {
              println("uploadingStart")
              uploadInAmazonS3             //take 10 to 12 sec
              println("uploaded")
              }
}yield done

println("uploadingStart")
val upload = for {
              done <- Future {
               uploadInAmazonS3            //take 10 to 12 sec
              }
}yield done
println("uploadingStart")

我想知道线程阻塞吗?

执行这三行时,线程是否被阻止

println("uploadingStart")
uploadInAmazonS3             //take 10 to 12 sec
println("uploaded")

而在另一个它不是阻塞线程它是这样的? 或两个案例中的线程相同?

2 个答案:

答案 0 :(得分:1)

不同之处在于,在以前的代码中,println在未来真正执行时执行,而在第二个println在未来被声明(准备但尚未执行)时被破坏

答案 1 :(得分:1)

将来的代码将由来自executionContext(线程池)

的某个线程执行

是,执行此部分的线程

println("uploadingStart")
uploadInAmazonS3             //take 10 to 12 sec
println("uploaded")

将被阻止,但不会被调用线程(主线程)。

在第二种情况下,两个println语句都由主线程执行。由于主线程只是在创建未来之后继续进行,所以println语句没有任何延迟地执行