这些方法之间是否存在差异?
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")
而在另一个它不是阻塞线程它是这样的? 或两个案例中的线程相同?
答案 0 :(得分:1)
不同之处在于,在以前的代码中,println
在未来真正执行时执行,而在第二个println
在未来被声明(准备但尚未执行)时被破坏
答案 1 :(得分:1)
将来的代码将由来自executionContext(线程池)
的某个线程执行是,执行此部分的线程
println("uploadingStart")
uploadInAmazonS3 //take 10 to 12 sec
println("uploaded")
将被阻止,但不会被调用线程(主线程)。
在第二种情况下,两个println语句都由主线程执行。由于主线程只是在创建未来之后继续进行,所以println语句没有任何延迟地执行