斯卡拉 – 期货的实际使用?即,如何杀死他们?
发布时间:2020-12-16 09:24:09 所属栏目:安全 来源:网络整理
导读:期货非常方便,但在实践中,您可能需要对其执行提供一些保证.例如,考虑: import scala.actors.Futures._def slowFn(time:Int) = { Thread.sleep(time * 1000) println("%d second fn done".format(time))}val fs = List( future(slowFn(2)),future(slowFn(10)
期货非常方便,但在实践中,您可能需要对其执行提供一些保证.例如,考虑:
import scala.actors.Futures._ def slowFn(time:Int) = { Thread.sleep(time * 1000) println("%d second fn done".format(time)) } val fs = List( future(slowFn(2)),future(slowFn(10)) ) awaitAll(5000,fs:_*) println("5 second expiration. Continuing.") Thread.sleep(12000) // ie more calculations println("done with everything") 这个想法是并行启动一些慢速运行的功能.但是如果期货执行的函数没有返回,我们就不想永远挂起.所以我们使用awaitAll()来对期货进行超时.但是,如果您运行代码,您会看到5秒计时器到期,但10秒未来继续运行并稍后返回.超时不会杀死未来;它只是限制了连接等待. 那么如何在超时后杀死未来呢?似乎期货不能在实践中使用,除非你确定它们将在已知的时间内返回.否则,您将冒险将线程池中的线程丢失到非终止期货,直到没有剩余. 所以问题是:你如何杀死未来?鉴于这些风险,期货的预期使用模式是什么? 解决方法
期货旨在用于您需要等待计算完成的设置,无论如何.这就是为什么它们被描述为用于慢速运行的功能.你想要这个功能的结果,但你可以同时做其他的事情.事实上,你可能有许多期货,你们可能希望并行运行的所有期货都是相互独立的,而你们要等到一切都完成了.
计时器只是等待获得部分结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容