我有一个线程像这样一个文件:
Thread.new do
# Do something
end.join
我的问题是关于子线程。我知道上面的线程将与主线程和主线程将“等待”这个主题来完成它终止主线程才能加入。
然而,如何在做这样的事情例如这个生命周期的工作:
Thread.new do
# Do Something
Thread.new do
# Do something else
end.join
end.join
请问内螺纹连接到父线程或者它加入到主线程?请问外螺纹的内螺纹和主线程的主线程“等待”的“等待”?
再次感谢!
我知道上面的线程将与主线程和主线程将“等待”这个主题来完成它终止主线程才能加入。
这不仅是因为你说.join
做的。 Ruby没有等待线程;任何线程由程序终止被杀死的时间不连接。
请问内螺纹连接到父线程或者它加入到主线程?
这也正是它被告知要做到:外螺纹写着“启动一个线程,然后再加入它,然后结束”。主线程将等待所有才能完成,因为它也被告知要.join
外螺纹。
main -launch-----------------------join
outer \---launch-----join---/
inner \---/
这里的地方恰巧相反的例子 - 同样,仅仅是因为我明确告诉它这样做:
inner = nil
outer = Thread.new do
inner = Thread.new do
sleep(3)
p "Inner done"
end
sleep(2)
p "Outer done"
end
sleep(1)
inner.join
p "Inner joined"
outer.join
p "Outer joined"
main -launch----------------join---join
outer \---launch-----/------/
inner \---/