如何在Ruby中创建Thread的子类?

时间:2013-08-27 01:31:02

标签: ruby

在C / C ++中,当我们创建一个线程时,有一种机制可以将一些参数传递给线程执行体。在java中,我们可以继承Thread类,以允许线程类包含一些实例变量。在Ruby中,创建线程的方法是:

thread = Thread.new {
   ... code thread execution body
}

Thread.new之后,线程立即开始运行。我见过的所有代码都在线程体中使用全局变量。假设我们需要一个互斥锁,代码是:

mutex = Mutex.new
thread = Thread.new {
   ... code thread execution body
   mutex.synchronized {
     ... some code
   }
}

是否可以创建Thread的子类并允许它具有一些实例变量?我无法弄清楚的技术问题是如何将代码块传递给子类以及子类如何将代码块传递给超级Thread类。

1 个答案:

答案 0 :(得分:1)

从广义上讲,你想要达到什么目标?

您不需要在Ruby中继承Thread。传递给Thread.new的代码块将简单地在调用Thread.new的代码的上下文中执行,并且可以访问调用方法的局部变量和实例的实例变量通话类。

class Dog
  def initialize(name)
    @name = name
  end
  def start_barking
    Thread.new do
      10.times do
        puts "Woof! Woof! #{@name}!"
      end
    end
  end
end

如果您正在寻找线程局部变量,可以使用Thread.current特殊哈希值。

10.times do |i|
  Thread.new do
    Thread.current[:i] = i
    sleep 1
    puts Thread.current[:i]
  end
end