Scala未来未分配,这是做什么的?

Cus*_*Bun 2 scala future

我是scala的新手,我正试图弄清楚这个代码在我想要更新的代码库中做了些什么.

删除一些细节,我不明白的块是这样的:

我已经看到一些scala代码可以执行以下操作:

val someA = something.createSomeA(....)

Future {
      someA.doSomething1(....)
      someA.doSomething2(.....)
}
// then log some things unrelated to the future
someA
// end of func
Run Code Online (Sandbox Code Playgroud)

我真的不明白在这种情况下未来会做什么,因为它没有分配给任何东西.有人能解释一下未来在做什么吗?我知道细节取决于doSomethings实际上做了什么,但有人可以解释一下这将是什么?我只熟悉Futures在分配给变量时的使用情况,然后稍后以某种方式检查完成情况.

帮助将不胜感激!! (抱歉格式不佳,我是通过手机拍的)

Dim*_*ima 5

给你三个字:"火与忘".如果您了解这种情况,将未来分配给变量,然后再检查/转换,那么您已经知道这里发生了什么:Future正在异步执行的内部.

唯一的区别是,在这种情况下,永远不会再次访问它.为什么?可能,因为没有人关心.某些操作在完成后返回结果,可以在以后使用,而其他操作则不会.

例如,如果我想异步打印出日志消息,我会写一些类似的东西,Future { logger.info(mymessage) }而不是将它分配给任何东西.为什么?好吧,我真的不关心它何时(或者甚至是否)完成.没有我可以使用的返回值,如果它失败了......好吧,我没有任何有意义的方法来处理它,除了忽略错误.

对于这样的操作,我不需要等待它完成,因为它无论如何都不会返回任何有用的东西.所以,我可以启动它,忘了.无需将其分配给任何东西.

  • 在Future完成之前主线程如何终止?你不需要等待那个未来吗? (4认同)
  • @VictorMoroz当系统中只剩余守护程序线程时,JVM将存在.因此,如果您的执行程序配置为创建守护程序线程(默认情况下为true),或者如果还有其他非守护程序线程仍在运行,则即使主线程存在,该进程也会保持运行状态.如果您只是创建守护程序线程,那么是的,终止main将终止它们.这通常不是问题,因为你通常会在类似"服务"的设置中看到这样的代码,其中main(几乎)永远不会退出. (2认同)