ruby - 这些线程如何工作?

标签 ruby multithreading

我有一个小代码只是为了测试

#!/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/

相关文章:

ruby - 使用 MIddleman 3.0 - 如何在动态页面上设置单独的页面标题?

ruby - 有_属性?问题

ruby-on-rails - 运行 rails server 时克隆的项目不会启动

ruby-on-rails - 构建 Rails 项目的正确方法

c++ - 如何使用asio简化多线程设计?

c# - 处理 Task.Run 中的异常

java - 使用 SwingWorker 高效发布

vb.net - 在主线程上使用句柄运行 Sub

java - 解释 Ruby 循环与 Java 的比较

Java - 同步 List 上的 getSize()