如果我使用以下代码启动了一个线程,如何从线程本身中捕获/检测退出调用,以便在终止之前进行一些清理?
thr = Thread.new { sleep }
thr.status # => "sleep"
thr.exit
thr.status # => false
我在想,也许它会像下面这样,但我不确定。
thr = Thread.new {
begin
sleep
rescue StandardError => ex
puts ex.message
rescue SystemExit, Interrupt
puts 'quit'
ensure
puts 'quit'
end
}
thr.status # => "sleep"
thr.exit #=> "quit"
thr.status # => false
答案 0 :(得分:1)
这是未经测试的,但是线程就像一切都可以专门通过在GC激活之前跳入。所以我认为你可以添加一个ObjectSpace终结器方法,该方法在Thread被垃圾收集之前执行,以便做你想要的。