在下面的代碼中,我創建了20個線程,分別打印出消息,睡眠和打印另一條消息。我在我的主線程中啓動線程,然後加入所有線程。我希望在所有線程完成後才能打印「全部完成」消息。然而,在所有線程完成之前,「完成」都會被打印出來。有人能幫我理解這種行爲嗎?Thread.join在scala中沒有像我預期的那樣運行
謝謝。 肯特
下面是代碼:
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")
}
這裏是輸出:
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
我是upvoting這個問題,因爲for-comprehensions,範圍和線程的特定交互似乎是一個常見的經常性錯誤模式。 – 2009-08-21 21:47:56