Рекурсивное создание нитей

  • 18
  • Недоступна
1. Измени класс GenerateThread так, чтобы он стал нитью. 2. Создай конструктор GenerateThread, который должен: 2.1. Вызвать конструктор суперкласса с параметром String - номером созданной нити. Используй createdThreadCount. 2.2. Запустить текущую нить. 2.3. Номер первой нити должен начинается с 1.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (550)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Никита
Уровень 22, Gdańsk, Poland
4 мая, 18:24
@Override
       public String toString() {
           return super.getName() + " created";
       }
Не могу понять почему нужно возвращать getName суперкласса, а не currentThread().getName().....
Edward Northwind
Уровень 20, Мариуполь, Украина
3 мая, 15:37
Вы, блин, серьезно? Вы предлагаете делать не атомарную операцию в над переменной, от которой зависит количество и названия потоков?! Вы антипримерами решили заняться?
LastOFUS
Уровень 27, Баку, Azerbaijan
вчера, 10:21
что это значит?
Олег
Уровень 28, Москва, Russian Federation
26 апреля, 12:07
if хорошо, while плохо
Максим
Уровень 30, Саратов, Russian Federation
10 апреля, 19:43
Пришлось создать одну лишнюю нить и поставить счетчик в -1, чтобы обмануть валидатор. У нас уже есть одна нить, которая создается в методе main. Но вывести ее в методе run мы не можем. Потому что метод run проходит проверку только в таком виде:
public void run() {
    if(createdThreadCount < count) {
        System.out.println(new GenerateThread());
    }
}
А в таком - нет:
public void run() {
    if(createdThreadCount < count) new GenerateThread();
    System.out.println(this);
}
Николай
Уровень 19, Раменское, Россия
7 апреля, 11:20
Зачем в условие 4 написано 'Пока количество созданных нитей меньше' ? Я и написал 'while', а потом час гадал, что валя хочет. Используйте 'if'.
WillMage
Уровень 28, Новосибирск
22 апреля, 09:43
Ну тут как бы название задачи говорит само за себя. Рекурсия мать ее))). Она может еще и не так подгадить, если отнестись к ней невнимательно))
Skipper;Mouse
Уровень 29, Минск, Belarus
22 апреля, 17:51
Спасибо) Какую херню я только не творил, чтобы синхронизировать это безобразие. А ошибка вот где)
Аркадий
Уровень 19, Санкт-Петербург, Россия
3 февраля, 19:26
Я не знаю каким путем я шел, но какое мое удивление было зайти в комментарии потом и увидеть, что не через AtomicInteger все решали :) Ну что ж, узнал про non-atomic операции 🤙
stelsup
Уровень 25, Москва, Россия
1 февраля, 15:21
Валидатор пропустил, решил вроде верно, однако результат вывода зависит от "фазы луны". Вывод каждый раз разный от 2-3 created до 15 created. Правильное решение работает также...
SWK
Уровень 11
24 марта, 11:26
Для борьбы с хаосом впендюрил в run()
Thread.sleep(10);
после печати и создания новой нити. Помогло. 1 миллисекунда не помогает. Сам не понимаю, как это работает.
Сергей Белов
Уровень 18, Москва, Россия
26 января, 16:06
Сначала поломал себе голову над вопросом как мне увеличивать переменную createdThreadCount на единицу и передавать её в super() при условии, что super() должен быть всегда на первом месте в конструкторе дочернего класса. Потом оказалось что "super(Integer.toString(createdThreadCount++))" и "super(Integer.toString(++createdThreadCount))" не одно и тоже.
Михаил
Уровень 51, Санкт-Петербург, Russian Federation
25 января, 13:50
Не увидел что переменная "createdThreadCount" уже создана. Создал свою в GenerateThread и потратил 2 часа на переписку решения и склонение авторов валидатора разными способами.
Антон Власов
Уровень 36, Russian Federation
17 декабря 2021, 17:46
решил в консоли, при запуске запускает произвольное количество нитей... проверил валидатором - принял решение. залез в решение от разработчиков. запустил код - выводит произвольное количество нитей... не понятно... пойду в идее решать чтоли