a = Thread.new { 5.times { |i| p i; sleep 0.1 } }
a.join
p 'a'
b = Thread.new { 5.times { |k| p k; sleep 0.1 } }
b.join
p 'b'
这将打印出 01234a01234b 。我希望它打印出来的是: 001122334a4b 。
p 'b'
和p 'a'
必须都在线程之外。它们必须在相应的线程完成后执行。 a 和 b 线程必须同时执行。
怎么做?
答案 0 :(得分:3)
好吧,如果你在加入时改变,你就会非常接近。
a = Thread.new { 5.times { |i| p i; sleep 0.1 } }
b = Thread.new { 5.times { |k| p k; sleep 0.1 } }
a.join
b.join
p 'a'
p 'b'
但这种行为无法保证。如果没有某种线程同步,您将获得调度程序希望获得的任何内容。您总是想要完全订购吗?