Потоки и исключения не обязательно являются друзьями, поскольку исключения не могут выпасть из текущего потока и предупредить родительский поток. Вам также необходимо включить уведомления об исключениях потоков, иначе вы никогда о них не услышите:
Thread.new do
Thread.abort_on_exception = true
end
Вам также нужно будет вызывать Thread.join
в каждом новом потоке, иначе основной будет работать без них.
Таким образом, ваш код по крайней мере остановится на исключении, вместо того, чтобы просто завершить поток, который его сгенерировал, и продолжить, как будто ничего не произошло.
Убедитесь, что вещи, которые вы вызываете в своей ветке, потокобезопасны, иначе вы можете получить неожиданные результаты.