在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
类。
答案 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