为什么这段代码有用(我看到输出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
答案 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 }
这将等待所有线程在退出之前终止。