我有一个小代码只是为了测试
#!/usr/bin/env ruby
def A
puts "A"
sleep 2
end
def B
puts "B"
sleep 2
end
[
Thread.new(loop{A()}),
Thread.new(loop{B()})
].each do |thr|
thr.join
end
它并没有像我希望的那样工作。 我希望我能得到
A
B
A
B
等等,但我只是
A
A
A
A
这意味着只有第一个线程被启动。 这是否意味着 ruby 等待第一个线程关闭以启动第二个线程? 我如何将 Thread 作为线程运行,我希望我的应用程序中有线程,它们将并行工作,主应用程序线程将是它自己的工作。
你能给我什么建议?
最佳答案
代码不是在线程中运行循环,而是在主线程中运行循环;这使得线程由于无限循环而无法启动。
替换以下行(括号):
[
Thread.new(loop{A()}),
Thread.new(loop{B()})
]
带(大括号):
[
Thread.new{loop{A()}},
Thread.new{loop{B()}}
]
传递 block 而不是(无限)循环的返回值。
关于ruby - 这些线程如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27224234/