红宝石穿线输出

时间:2014-07-28 05:36:28

标签: ruby multithreading puts

我尝试这个例子:

10.times do
  Thread.new do
    greeting_message = "Hello World ruby !"
    puts "#{greeting_message}
  end
end

我尝试多次运行,有时候puts运行一次:

 Hello World ruby ! ruby basic_threadding_ruby.rb  0.05s user 0.04s system 97% cpu 0.096 total

其他时间两次,有时甚至完整10次。

这种不一致让我感到困惑。有Hello World ruby !只打印一次的原因吗?我想当你运行一个ruby脚本时,它会等到所有线程/进程完成后再终止并返回。

1 个答案:

答案 0 :(得分:2)

  

我想当你运行一个ruby脚本时,它会等到所有线程/进程完成后再终止并返回?

都能跟得上!来自the documentation for Thread

  

如果我们在主线程终止之前没有调用thr.join,那么包括thr在内的所有其他线程都将被终止。

所以你需要加入所有这些:

threads = 10.times.map do
  Thread.new do
    puts 'Hello, Ruby!'
  end
end

threads.each &:join