为什么结果不是从1到10,而是只有10s?
require 'thread'
def run(i)
puts i
end
while true
for i in 0..10
Thread.new{ run(i)}
end
sleep(100)
end
结果:
10
10
10
10
10
10
10
10
10
10
10
为什么循环?我正在运行while循环,因为稍后我想一直遍历数据库表并回显从数据库中检索到的所有记录。
传递给的块Thread.new
实际上可能在将来的某个时刻开始,到那时,的值i
可能已更改。在您的情况下,它们都已10
增加到所有线程实际运行之前。
要解决此问题,Thread.new
除了块之外,还可以使用接受参数的形式:
require 'thread'
def run(i)
puts i
end
while true
for i in 0..10
Thread.new(i) { |j| run(j) }
end
sleep(100)
end
这会将块变量设置为调用时j
的值。i
new
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句