1

我正在尝试这个例子:

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​​ 脚本时,它会等到所有线程/进程都完成后才终止并返回。

4

1 回答 1

2

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

没有!从文档中Thread

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

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

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

threads.each &:join
于 2014-07-28T05:45:37.707 回答