在Ruby中,Thread#run和Thread#wakup之间有什么区别?
RDoc指定不使用Thread #wakeup调用 scheduler ,但这意味着什么?何时使用唤醒 vs 运行的示例?感谢。
修改
我看到Thread#wakup导致线程变为可运行,但是如果它在执行Thread#run之前不会执行(它会唤醒线程)会有什么用呢?
有人可以提供 wakeup 做一些有意义的事情的例子吗?出于好奇心的缘故=)
答案 0 :(得分:3)
以下是一个示例,用于说明其含义(来自here的代码示例):
<强> Thread.wakeup 强>
thread = Thread.new do
Thread.stop
puts "Inside the thread block"
end
$ thread
=> #<Thread:0x100394008 sleep>
上面的输出表明由于stop命令,新创建的线程处于睡眠状态。
$ thread.wakeup
=> #<Thread:0x100394008 run>
此输出表明线程不再处于休眠状态,并且可以运行。
$ thread.run
Inside the thread block
=> #<Thread:0x1005d9930 sleep>
现在线程继续执行并打印出字符串。
$ thread.run
ThreadError: killed thread
<强> Thread.run 强>
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