En el siguiente código creo 20 hilos, haga que cada uno imprima un mensaje, duerma e imprima otro mensaje. Comienzo los hilos en mi hilo principal y luego unir todos los hilos también. Esperaría que el mensaje de "todo listo" solo se imprima después de que todos los hilos hayan terminado. Sin embargo, "todo listo" se imprime antes de que todos los hilos terminen. ¿Alguien puede ayudarme a entender este comportamiento?Thread.join no se comporta como esperaba en scala
Gracias. Kent
Aquí está el código:
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")
}
Aquí está la salida:
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
Estoy votando esta pregunta porque la interacción específica de for-comprehensions, ranges and threads parece ser un patrón de error recurrente común. –