让我们从这个问题中获取这段代码:
并添加一行:
require 'thread'
def foo(&block)
bar(block)
end
def bar(block)
Thread.abort_on_exception=true
@main = Thread.new { block.call }
end
foo {
sleep 2
puts 'thread_1'
}.join
puts 'main_thread'
这是我得到的输出:
thread_1
main_thread
这对许多人来说似乎合乎逻辑,但对我来说却不是。我期待:
main_thread
thread_1
为什么?因为这就是我看待事物的方式
main_thread : ----------(starts thread_1)-(prints 'main_thread')--Done!
thread_1 : \-(sleeps 2 secs)----------(prints 'thread_1')--Done!
但这并没有发生。如果我删除 .join 部分,那么“thread_1”甚至不会出现。据我了解 .join 挂断(暂停主线程)。为什么?这不是反对并发吗?帮助澄清我的想法?