package com.javarush.task.task16.task1633;

/*
Отдебажим все на свете
*/

public class Solution {
    public static Thread.UncaughtExceptionHandler handler = new OurUncaughtExceptionHandler();

    public static void main(String[] args) {
        TestedThread commonThread = new TestedThread(handler);

        Thread threadA = new Thread(commonThread, "Нить 1");
        Thread threadB = new Thread(commonThread, "Нить 2");

        threadA.setUncaughtExceptionHandler(handler);
        threadB.setUncaughtExceptionHandler(handler);

        threadA.start();
        threadB.start();

        threadA.interrupt();
        threadB.interrupt();
    }

    public static class TestedThread extends Thread {
        public TestedThread(Thread.UncaughtExceptionHandler handler) {
            setUncaughtExceptionHandler(handler);
            start();
        }

        public void run() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                throw new RuntimeException("My exception message");
            }
        }
    }

    public static class OurUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            System.out.println(t.getName() + ": " + e.getMessage());
        }
    }
}
если уж и создаватб объект класса Thread, то точно не при помощи объекта наследника класса Thread, а реализации функционального интефейса Runnable, но окей, раз мы читирим так и используем доп функионал, то я считаю, что в нём нужно использовать Thread.setDefaultUncaughtExceptionHandler(), и не только, чтобы обосновать читерство в создании объекта Нити, но и для того, чтобы избежать дублирования кода. но если этого не сделать и потом еще для каждого объекта устанавливать свой обработчик (который по сути будет одним по заданию), то смысл в создании класса TestedThread с наследованием от Thread полностью исчезает. Почему я не прав?