public static class GenerateThread extends Thread {
public GenerateThread() {
super(String.valueOf(++createdThreadCount));
start();
try {
this.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return Thread.currentThread().getName() + " created";
}
@Override
public void run() {
if (count > createdThreadCount) {
System.out.println(new GenerateThread());
}
}
Объясните почему в таком варианте выводит не имя вновь созданной нити???Dmytro
24 уровень
Объясните переопределение toString
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
WillMage
22 апреля 2022, 10:45
Когда вы вызываете конструктор у класса "Отца" то есть super(String.valueOf(++createdThreadCount)); Вы во внутреннее поле name присваиваете String значение и методом getName() (обычный гетер к слову) вы получаете это значение из класса отца. А когда вы вызываете Thread.currentThread().getName() вы пытаетесь получить название нити из класса потомка, да еще из той нити которая текущая. Да и еще рекурсивный вызов нитей предполагает под собой что вы последовательно в одну за другой нитью встраиваете новую и они не завершаются, они работают.
+2
Вадим
12 мая 2022, 18:10
А когда вы вызываете Thread.currentThread().getName() вы пытаетесь получить название нити из класса потомка
-------------------------------
Была такая же ситуация. Но что-то мне кажется, что наоборот: если использовать Thread.currentThread().getName(), то Name берется у отца. Собственно, поэтому при таком вызове в консоль дополнительно выводиться "main created".
А если вызывать просто getName, то имя берется у новосозданного потомка, как нам и нужно.
0
WillMage
13 мая 2022, 04:40
https://javarush.com/help/9418 Вот старший товарищ объяснил почему выводится "main created". Там в комментах.
0
Вадим
13 мая 2022, 15:40
Ну я как бы так и написал.
Что Thread.currentThread().getName() берет Name у предшествующей нити (в сообщении "отца", хоть это и не "отец" по факту, а просто предыдущая нить).
А у Вас наоборот написано, что такой метод пытается взять имя у потомка.
0