小编Ken*_*ent的帖子

Thread.join的行为与我在scala中的预期不同

在下面的代码中,我创建了20个线程,让它们分别打印出一条消息,睡眠并打印另一条消息.我在主线程中启动线程,然后加入所有线程.我希望只有在所有线程完成后打印"全部完成"消息.然而,在完成所有线程之前,"全部完成"被打印出来.有人可以帮我理解这种行为吗?

谢谢.肯特

这是代码:

  def ttest() = {
     val threads = 
      for (i <- 1 to 5)
        yield new Thread() {
          override def run() {
            println("going to sleep")
            Thread.sleep(1000)
            println("awake now")
          }
        }

    threads.foreach(t => t.start())
    threads.foreach(t => t.join())
    println("all done")
  }
Run Code Online (Sandbox Code Playgroud)

这是输出:

going to sleep
all done
going to sleep
going to sleep
going to sleep
going to sleep
awake now
awake now
awake now
awake now
awake now
Run Code Online (Sandbox Code Playgroud)

multithreading scala join

17
推荐指数
2
解决办法
2669
查看次数

标签 统计

join ×1

multithreading ×1

scala ×1