我正在阅读这篇文章http://danielwestheide.com/blog/2013/01/16/the-neophytes-guide-to-scala-part-9-promises-and-futures-in-practice.html,我正在看这段代码:
object Government {
def redeemCampaignPledge(): Future[TaxCut] = {
val p = Promise[TaxCut]()
Future {
println("Starting the new legislative period.")
Thread.sleep(2000)
p.success(TaxCut(20))
println("We reduced the taxes! You must reelect us!!!!1111")
}
p.future
}
}
我已经看过几次这种类型的代码了,我很困惑。我们有Promise
:
val p = Promise[TaxCut]()
这是Future
:
Future {
println("Starting the new legislative period.")
Thread.sleep(2000)
p.success(TaxCut(20))
println("We reduced the taxes! You must reelect us!!!!1111")
}
我没有看到他们之间的任何分配,所以我不明白:他们是如何联系的?
答案 0 :(得分:3)
我没有看到他们之间的任何分配,所以我不明白:怎么样 他们有联系吗?
Promise
是创建Future
的一种方法。
当您使用Future { }
并导入scala.concurrent.ExecutionContext.Implicits.global
时,您将在Scala的一个线程池线程上排队一个函数。但是,这不是生成Future
的唯一方法。 Future
不一定需要安排在不同的线程上。
这个例子的作用是:
Promise[TaxCut]
,将在不久的将来某个时间完成。Future
apply对要在线程池线程内运行的函数进行排队。此功能还通过Promise.success
方法Promise
Promise.future
返回承诺生成的未来。当这个未来返回时,它可能还没有完成,这取决于排队到Future
的函数的执行执行速度有多快(OP试图通过Thread.sleep
方法传达这个,延迟了完成未来)。