我正在尝试找出一种好方法来等待主线程完成之前执行所有线程。
如何在下面的代码中做到这一点?
threads = []
counter = 1000
lines = 0
counter.times do |i|
puts "This is index number #{i}."
end
puts "You've just seen the normal printing and serial programming.\n\n"
counter.times do |i|
Thread.new do
some_number = Random.rand(counter)
sleep 1
puts "I'm thread number #{i}. My random number is #{some_number}.\n"
lines += 1
end
end
messaged = false
while lines < 1000
puts "\nWaiting to finish.\n" unless messaged
print '.'
puts "\n" if lines == 1000
messaged = true
end
puts "\nI've printed #{lines} lines.\n"
puts "This is end of the program."
程序将我是线程号 XXX。我的随机数是 YYY 与几乎在主线程末尾的 while 循环中的点混合在一起。如果我不使用 while 循环,程序将在线程完成之前完成。
最佳答案
要让父级等待子级完成,请使用 join
threads = []
counter.times do |i|
thr = Thread.new do
some_number = Random.rand(counter)
sleep 1
puts "I'm thread number #{i}. My random number is #{some_number}.\n"
lines += 1
end
threads << thr
end
threads.each {|thread| thread.join }
关于Ruby 1.9.3-p140 - 使用线程 - 如何等待所有结果从线程中出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073892/