10

在 Ruby 中,Thread#runThread#wakup 有什么区别?

RDoc 指定不使用 Thread#wakeup 调用调度程序,但这意味着什么?何时使用唤醒运行的示例?谢谢。

编辑:
我看到Thread#wakup导致线程变得可运行,但是如果在执行Thread#run之前它不会执行(无论如何都会唤醒线程),那么它有什么用?

有人可以提供一个例子,唤醒做一些有意义的事情吗?出于好奇=)

4

1 回答 1

4

这是一个示例来说明它的含义(来自此处的代码示例):

线程唤醒

thread = Thread.new do 
  Thread.stop
  puts "Inside the thread block"
end

$ thread
=> #<Thread:0x100394008 sleep> 

上面的输出表明新创建的线程因为停止命令而处于休眠状态。

$ thread.wakeup
=> #<Thread:0x100394008 run>

此输出表明线程不再处于休眠状态,并且可以运行。

$ thread.run
Inside the thread block
=> #<Thread:0x1005d9930 sleep>   

现在线程继续执行并打印出字符串。

$ thread.run
ThreadError: killed thread

线程运行

thread = Thread.new do 
  Thread.stop
  puts "Inside the thread block"
end

$ thread
=> #<Thread:0x100394008 sleep> 

$ thread.run
Inside the thread block
=> #<Thread:0x1005d9930 sleep>   

线程不仅唤醒,而且继续执行并打印出字符串。

$ thread.run
ThreadError: killed thread
于 2012-10-06T21:03:50.983 回答