数组中每个对象的新线程未输出或连接

时间:2017-05-22 18:11:47

标签: ruby multithreading

array = ["1","2"]
array.each do |arrayobj|
    Thread.new {
        puts "#{arrayobj}"
    }
    Thread.join
end

您好!我可能正在做一些非常错误的事情,但我似乎无法弄明白。谢谢你。

1 个答案:

答案 0 :(得分:2)

joinThread的实例上的方法,而不是Thread类本身。

您需要创建一个线程集合,然后在每个线程上调用join

array.map do |i| 
  Thread.new { puts i }
end.map(&:join)

第一个map会将输入array映射到一个线程数组,第二个map将在每个线程上调用join,其扩展形式是.map { |thread| thread.join }

请参阅https://ruby-doc.org/core-2.2.0/Thread.html

这是另一个更好地说明它有效的例子:

array = (1..100).to_a
array.map { |i| Thread.new { sleep(rand); puts i } }.map(&:join)
# => 97
31
75
36
50
53
17
81
49
35
83
11
13
24
29
7
.. etc.