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

それ以外の場合は2回、場合によっては完全に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 に答える