看来,在Ruby 2.4和2.5中,一旦你对它们调用#kill
,线程就不会死掉。此代码段将打印 Not dead 几次:
thread = Thread.new { loop {} }
thread.kill
puts "Not dead" while thread.alive?
我希望阻止主线程的执行,直到辅助线程被终止。我尝试使用thread.join.kill
,但当然这会阻塞主线程,因为线程的循环永远不会终止。
如何在主线程继续之前确保线程被杀死?
答案 0 :(得分:10)
想出来;杀死它后你仍然可以#join
线程,所以你可以使用thread.kill.join
来阻止线程死掉。
此代码永远不会打印 Not dead :
thread = Thread.new { loop {} }
thread.kill.join
puts "Not dead" while thread.alive?
答案 1 :(得分:0)
我正在这样做:
thread = Thread.new { loop {} }
thread.kill
sleep 0.001 while thread.alive?
这就是我终止ThreadPool中的线程的方式。