Я вот одно не понимаю - мы наследуем TestedThread от Thread и передаем его в конструкторы ThreadA и ThreadB.
Ранее в лекциях приводился пример отличия создания нескольких нитей при наследовании от класса Thread и реализации интерфейса Runnable. В ней говорилось, что при наследовании от класса мы не сможем запустить несколько нитей на основе одного объекта. В данном примере же это реально.
P/S решил именно тем, что вместо наследования использовал Runnable...
Этот UncaughtExceptionHandler все перепутал в голове) Помогите разобраться.
Слава Кутаев
26 уровень
Вопрос по наследованию
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Max
1 марта 2020, 09:27
Полный и детальный разбор этой задачи я сделал тут https://javarush.com/help/11837
Найти легко - самый длинный комментарий)
Не забывайте оценивать, чтобы я знал сколько человек прочитало и видел вашу реакцию. Это, в свою очередь, будет стимулировать меня на детальный разбор других сложный задач курса.
+1
Евгений Калинов
12 декабря 2018, 08:51решение
Там говорилось о другом, отличие в том, что наследовать можно только один класс, а реализовывать сколько угодно интерфейсов и если ты наследуешь свой класс от Thread (он в свою очередь реализует Runnable) то ты теряешь возможность наследовать другие классы, но при запуске тебе не нужно создавать экземпляр класса Thread и передавать свой объект в конструктор создаваемого экземпляра поскольку твой класс и так Thread и ты просто вызываешь start(), а в случае реализации Runnable тебе необходимо создать экземпляр класса Thread и передать свой объект в конструктор, но у тебя остается возможность наследовать. В данной задаче используется один объект commonThread для запуска аж трех нитей, сперва он запускает сам себя в конструкторе предварительно установив себе UncaughtExceptionHandler, но он не отрабатывает поскольку эта нить не прерывается, потом идет передача этого же объекта в конструкторы двух новых нитей, но заметь у них в исходном коде задачи вызывается прерывание но не устанавливается UncaughtExceptionHandler, таким образом решением задачи является предварительный вызов у этих двух нитей метода setUncaughtExceptionHandler(handler) с передачей туда нашего обработчика
+12
Слава Кутаев
12 декабря 2018, 13:10
Вот жеж цитатаиз лекции 2 уровня 6 квеста Кор:
"...
— Да, но у него есть минусы:
1) Вам может понадобиться запустить несколько нитей на основе одного единственного объекта, как это сделано в «примере с Наташей».
2) Если вы унаследовались от класса Thread, вы не можете добавить еще один класс-родитель к своему классу.
3) Если у вашего класса есть класс-родитель, вы не можете добавить второго – Thread."
0
Евгений Калинов
12 декабря 2018, 13:24
Ясно, в задаче объект commonThread сам как нить запускается один раз и два раза передается как Runnable в нити threadA и threadB
0