Thread.abort_on_exception = true
threads = 4.times.map do |number|
Thread.new(number) do |i|
raise "Boom!" if i == 1
print "#{i}\n"
end
end
puts "Waiting"
threads.each {|t| t.join }
puts "Done"
产生0,2然后错误。我不明白为什么每次只输出0然后退出才输出2?
答案 0 :(得分:2)
这是一个调度问题。线程并不真正并行运行。相反,Ruby解释器在执行线程之间不断切换。
在这种情况下,线程1引发必须处理的异常。这可能需要足够的时间来允许线程2执行。
尝试在sleep 0.1
和raise
行之间添加print
,这样就不会产生任何输出。