В приведенном ниже коде я создаю 20 потоков, каждый из них распечатывает сообщение, спящий и печатает другое сообщение. Я запускаю потоки в основном потоке, а затем присоединяюсь ко всем нитям. Я ожидаю, что сообщение "все сделано" будет напечатано только после завершения всех потоков. Тем не менее "все сделано" печатается до того, как все потоки будут выполнены. Может ли кто-нибудь помочь мне понять это поведение?
Спасибо. Kent
Вот код:
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