Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个Ruby线程代码输出2?_Ruby - Fatal编程技术网

为什么这个Ruby线程代码输出2?

为什么这个Ruby线程代码输出2?,ruby,Ruby,生成0、2,然后生成错误。我不明白为什么每次只输出0然后退出时它都输出2?这是一个调度问题。这些线程并不真正并行运行。相反,Ruby解释器在执行线程之间不断切换 在这种情况下,线程1引发一个必须处理的异常。这可能需要足够的时间来允许线程2执行 尝试在raise和print行之间输入sleep 0.1,这将导致根本没有输出 Thread.abort_on_exception = true threads = 4.times.map do |number| Thread.new(number)

生成0、2,然后生成错误。我不明白为什么每次只输出0然后退出时它都输出2?这是一个调度问题。这些线程并不真正并行运行。相反,Ruby解释器在执行线程之间不断切换

在这种情况下,线程1引发一个必须处理的异常。这可能需要足够的时间来允许线程2执行

尝试在
raise
print
行之间输入
sleep 0.1
,这将导致根本没有输出

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"