Trong mã bên dưới, tôi tạo 20 chủ đề, yêu cầu mỗi người in ra một tin nhắn, ngủ và in một tin nhắn khác. Tôi bắt đầu các chủ đề trong chủ đề chính của tôi và sau đó tham gia tất cả các chủ đề là tốt. Tôi sẽ mong đợi thông báo "tất cả đã thực hiện" chỉ được in sau khi tất cả các chủ đề đã hoàn thành. Tuy nhiên, "tất cả được thực hiện" được in trước khi tất cả các chủ đề được thực hiện. Ai đó có thể giúp tôi hiểu hành vi này?Thread.join không hoạt động như tôi mong đợi trong scala
Cảm ơn. Kent
Đây là mã:
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")
}
Đây là kết quả:
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
Tôi đang upvoting câu hỏi này vì tương tác cụ thể của việc hiểu, phạm vi và chủ đề có vẻ là một mẫu lỗi lặp lại phổ biến. –