美文网首页
Scala Future代码块内的代码不被执行

Scala Future代码块内的代码不被执行

作者: 希望是水户洋平 | 来源:发表于2020-08-30 20:44 被阅读0次

    在学习Scala的并发包中的Future对象时,遇到的一个有意思的bug,现记录如下,并给出修正后的结果及分析bug出现原因。
    先上代码:

    package cha17
    
    import java.lang
    import java.time._
    
    import scala.concurrent._
    import ExecutionContext.Implicits.global
    class Test_17 {
    }
    
    object Test_17  {
    
      def main(args: Array[String]): Unit = {
        Future {
          Thread.sleep(10000)
          println(s"This is the future at ${LocalTime.now()}")
        }
        println(s", This is the present at ${LocalTime.now()}")
    
        
      }
    
    }
    

    运行结果和预想中的情况并不一样:Future代码块的内容并不会被执行!只会输出
    :This is the present at 现在的时间。
    一个很简单地修正这个bug的方法如下,同样放上源码:

    package cha17
    
    import java.lang
    import java.time._
    
    import scala.concurrent._
    import ExecutionContext.Implicits.global
    class Test_17 {
    }
    
    object Test_17  {
    
      def main(args: Array[String]): Unit = {
        Future {
          Thread.sleep(10000)
          println(s"This is the future at ${LocalTime.now()}")
        }
        println(s", This is the present at ${LocalTime.now()}")
    
        scala.io.StdIn.readLine()
      }
    
    }
    

    另一方面,如果像如下的代码这样不写main函数及定义伴生对象Test_17的话,是可以在REPL环境下用:load命令运行的。

    import java.time._
    
    import scala.concurrent._
    import ExecutionContext.Implicits.global
      
    Future {
      Thread.sleep(10000)
      println(s"This is the future at ${LocalTime.now()}")
    }
    println(s", This is the present at ${LocalTime.now()}")
    

    运行结果如下:


    image.png

    相关文章

      网友评论

          本文标题:Scala Future代码块内的代码不被执行

          本文链接:https://www.haomeiwen.com/subject/zhoesktx.html