Задачу решил. Думал, что разобрался. но пропустил валидатор такой вариант, когда поменял на дефолтный метод прямо в конструкторе. Но ведь при создании потоков А и B используется конструктор из раннабле. Почему потоки A и B видят setDefaultUncaughtExceptionHandler не в своем в конструкторе.
Andrey
51 уровень
Почему потоки A и B видят setDefaultUncaughtExceptionHandler не в своем в конструкторе.
Решен
Комментарии (11)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Waumok Backend Developer
28 июня 2021, 11:41
разжевали тута)
+1
Andrey
28 июня 2021, 14:42
Это я внимательно читал уже, и сильно помогло для понимания задачи в целом. Но вопрос остался один. Он и сформулирован. Почему на объектах класса треад сработал конструктор класса наследника. Я для себя понял, что в мэйне нужно дефолт метод вызывать. В привиденной ссылке это как раз и объясняется доходчиво. Про дефолт метод как то расплывчато, что он статический. Если он статический, это что, значит его можно в любом месте писать, и он будет на всех объектах срабатывать? Вот здесь разжуйте пожалуйста
0
Waumok Backend Developer
28 июня 2021, 14:59полезный
Static не для объекта, а для класса??
типо статическое поле одно на все обьекты? это не понятно?
поле одно для всех обьектов, оно же статик
ну либо я не понял, вас
+2
Waumok Backend Developer
28 июня 2021, 15:03полезный
так там наоборот конструктор не сработал) если память не изменяет
я щас зайти потестить не могу,
но по моему. я это поле вообще менял в методе Run у текущей нити) а не в main
тут могу ошибаться(хотя можно и в main- но там 2 строки тогда писать)
+1
Andrey
28 июня 2021, 15:14
Да,не сработал по умолчанию. там был не дефолтный метод. Как раз если в задаче поменяю Конструкторе метод на дефолтный, то засчитывается задача. То есть, при создании объекта коммон треад (первый объект, дочерний класс) сработал дефолтный метод в конструкторе и установил значение поля. Для всех следующих объектов оно уже установлено. Поэтому и работает при создании объектов родительского класса без обращения к этому конструктору. Я правильно понял?
0
Waumok Backend Developer
28 июня 2021, 15:31
короче, как понял я это когда сам решал задачу,
ты создал обьект наследник нитки, он приобрел поля нитки, и в конструкторе ты их иницилизировал, потом передал родителю нитки в качестве обьекта "runnable", но нитке родителю, все равно, какое ты поле себе там инициализоровал, ему надо исполнять метод run, больше его мало что интересует,
все поля которые ты созлал, пригодятся для метода run, но к потоку, который выполняет, твой метод run, они отношения не имеют
потому мы сами вручную настраиваем у родителя
0
Andrey
28 июня 2021, 15:58
"все поля которые ты созлал, пригодятся для метода run",
А так как у нас в run выбрасывается new RuntimeException , то инициализированное наследником поле сработало для родителя. Верно?
Тогда ничего настраивать у родителей в этой задаче не нужно, хотя можно как один из вариантов решения
0
Waumok Backend Developer
28 июня 2021, 16:02
никакое поле наследника не сработало,
сработало поле основной нити которое выполняло run,
смысл задачи установить в это поле значение, самому
конструктор наследника, чтобы сбить с толку
0
Andrey
28 июня 2021, 16:09
Да, не так выразился. Сработало поле основной нити, но установил его наследник получается, а не я сам. Я для этого добавил одно слово defalt в название метода в конструкторе наследника. И это решение засчиталось.
0
Waumok Backend Developer
28 июня 2021, 16:12решение
Как вариант, дефолт- статическое, (одно для всех)
а не дефолт- не статическое, (у каждого свое), я решал 2 способом, вы первым)))
Тогда все верно
+2
Andrey
28 июня 2021, 16:15решение
Спасибо за разъяснения, помогло понять суть то, что метод устанавливает значение статической переменной, я это упустил
+1