Ruby中的线程

时间:2012-03-09 03:33:28

标签: ruby multithreading

为什么这段代码有用(我看到输出1 2 3):

for i in 1..3
    Thread.new{
        puts i
    }
end

但是,以下代码会产生相同的输出(我看不到输出1 2 3)?

for i in 1..3
    Thread.new{
        sleep(5)
        puts i
    }
end

1 个答案:

答案 0 :(得分:4)

当你点击脚本的末尾时,Ruby会退出。如果在最后一个循环后添加sleep 10,则可以看到输出显示。 (虽然每次都是3,因为绑定到i会反映处理结束时的值,而睡眠会导致线程切换回循环。)

您可能需要以下内容:

threads = []
for i in 1..3
  threads << Thread.new {
    sleep 5
    puts i
  }
end
threads.map {|t| t.join }

这将等待所有线程在退出之前终止。