Всем привет! По всем основным вопросам по задаче разобрался, спасибо комментаторам и гуглу, но столкнулся тем, что не понимаю каким образом в переопределенный метод void uncaughtException (Thread t, Throwable e) передается нить и исключение, которое возникло в ходе ее выполнения. Нигде это явным образом не прописано (я не нашел не в описании класса Thread в IDEA, ни в доках оракла). Могу предположить, что это тут уже работает логика JVM. Скорее всего, учитывая мой уровень в Java, мне в такую глубь и не надо, но все равно интересно :). Был бы благодарен, если кто-то меня просветит по этому поводу или накидает ссылок или названия книг :).