С задачей все примерно понятно кроме одного. Что это за конструктор?
Thread threadA = new Thread(commonThread, "Нить 1");
Из документации: target – the object whose run method is invoked when this thread is started. If null, this thread's run method is invoked.
Я правильно понимаю описание, что созданным таким конструктор thread не имеет своего метода run() и вызывает run другого объекта target, переданного в качестве аргумента? Как при этом работает UncaughtExceptionHandler? Почему вызывается run, не вызывается setUncaughtExceptionHandler, но вызывается setDefaultExceptionHandler? Почему вообще setDefaultExceptionHandler, прописанный в конструкторе класса TestedThread сработал и для new Thread?
В общем, вопросов уйма, подскажите пожалуйста, как тут происходит инициализация объектов и как тут связаны друг с другом threadA и target конструктора?