thread = Thread.fork {
Thread.current[:status] = 'in progress'
sleep 0.5
}
sleep 0.1
# シンボルと文字列どちらでも同じ値が取得できる.
p thread[:status]
thread['status']
"in progress"
"in progress"
t = Thread.fork { sleep 1 }
sleep 0.1
p t.status
p t.alive?
t.stop?
"sleep" true
true
t = Thread.fork {
Thread.stop
puts 'hi'
}
sleep 0.1
p t.status
t.run
"sleep" hi
#<Thread:0x0000563608766670@(pry):18 dead>
t = Thread.fork { raise }
# 元のスレッドで例外が発生する.
t.join
# Thread#join 等を呼ばない場合は元スレッドで例外は上らない
t = Thread.fork { raise }
t = Thread.fork {
begin
loop { }
ensure
puts 'ensureing...'
end
}
t.raise
begin
t.join
rescue
p t.status
end