Кто первый встал - того и тапки

  • 18
  • Недоступна
1. Разберись, что делает программа. 1.1. Каждая нить должна читать с консоли слова. Используй готовый static BufferedReader reader. 1.2. Используй AtomicInteger readStringCount, чтобы посчитать, сколько слов уже считано с консоли всеми нитями. 2. Реализуй логику метода run:
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (488)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
rogueGodname
Уровень 28
3 июня, 06:35
while (count > readStringCount.get()) { } Для всех кто, как и Я сидел думал над этой конструкцией ("зачем Ты тут, брат?!"). Она нужна для того, чтобы не дать уйти основному потоку main вниз до методов interrupt, пока ваши нити корректно не запишут данные из консоли в свои коллекции. Блок while, когда примет форму false из-за переменной "счетчика" readStringCount даст возможность потоку пойти вниз до методов interrupt побочных нитей. До этого момента, пока блок while дает true программа будет "висеть" на этом моменте
Abouk
Уровень 19
5 мая, 14:11
какой смысл заложен в части кода: while (count > readStringCount.get()) { } в задаче 1628?
Stanislav
Уровень 15
13 мая, 13:52
считать столько строк, сколько указали в
int count = Integer.parseInt(reader.readLine());
Abouk
Уровень 19
5 мая, 14:10
какой смысл заложен в части кода: while (count > readStringCount.get()) { } ?
Suzuya Jūzō
Уровень 41
25 апреля, 15:38
Самое корректное решение и объяснение тута
Михаил Java Developer
15 апреля, 19:42
Вы решили задачу лучше, чем 15% учеников. Вам удалось ее решить с 4 попытки. Среднее количество попыток для этой задачи 2.71. Всего эту задачу решили 29363 учеников. Ваша награда: x18
Anonymous #3232154
Уровень 37
5 апреля, 15:17
В чем смысл задачи? что это программа должна делать и какой результат получать? задачу решил, но смысла ее вообще не понял. Просто по пунктам прошелся, а что она делает вообще не ясно
Анна
Уровень 32
27 апреля, 11:54
познакомить с классом AtomicInteger. Инкрементация не атомарная операция, а операция разбитая на маленькие составляющие. А класс AtomicInteger позволяет сделать ее атомарной.
Alex
Уровень 17
31 марта, 18:38
Теперь я понял зачем нужен метод ready(). Пока поток занят другой нитью, он будет показывать false. И соответственно в алгоритме задачи будет возвращаться к проверке на флаг прерывания. Т.е. по аналогии с магазином: кто-то встает в очередь и стоит до упора, а кто-то покупает только без очереди, но магазин может закрыться.
LukasKeyn
Уровень 37
16 марта, 13:25
смысла в задаче не понял. Что правильное решение, что свое - одна дичь несуразная, написанная тупо по пунктикам.
Gans Electro
Уровень 37
11 марта, 22:43
AtomicInteger в Java - это класс, предназначенный для обеспечения потокобезопасности
операций с целочисленными значениями. Это значит, что если несколько потоков обращаются к
одному и тому же объекту AtomicInteger, то все операции с ним будут выполняться корректно и
безопасно.

Класс AtomicInteger предоставляет следующие методы:

get() - возвращает текущее значение объекта AtomicInteger
set(int value) - устанавливает новое значение объекта AtomicInteger
getAndSet(int value) - возвращает текущее значение объекта AtomicInteger и устанавливает новое значение
incrementAndGet() - увеличивает значение объекта AtomicInteger на 1 и возвращает новое значение
decrementAndGet() - уменьшает значение объекта AtomicInteger на 1 и возвращает новое значение
getAndIncrement() - возвращает текущее значение объекта AtomicInteger и увеличивает его на 1
getAndDecrement() - возвращает текущее значение объекта AtomicInteger и уменьшает его на 1
compareAndSet(int expect, int update) - проверяет, равно ли текущее значение объекта AtomicInteger
ожидаемому значению expect, и если равно, то устанавливает новое значение update и возвращает
true. Если же текущее значение отличается от ожидаемого, то метод ничего не делает и возвращает
false.
Эти методы позволяют обеспечить корректную и безопасную работу с объектом AtomicInteger в
многопоточной среде. Например, при использовании метода incrementAndGet() несколькими
потоками одновременно, каждый поток увеличит значение на 1, и все изменения будут сохранены
корректно и безопасно.
Denys Sukhoivan
Уровень 26
Expert
13 марта, 11:31
очень помог ваш комментарий)
Gans Electro
Уровень 37
14 марта, 05:50
Тебе передают спасибо ChatGPT: Благодарю за передачу благодарности! Я всегда рад помочь. Если у вас есть какие-либо вопросы или проблемы, не стесняйтесь спрашивать!
very junior java developer www.codewars.com/r/TTH6EQ
5 марта, 12:41
Если у кого то не закрывается после вывода значений, программа продолжает принимать значения и только после ввода нескольких закрывается ниже решения без синхронизаций и т.д. а то только с тем что уже изучали по курсу:
if(reader.ready()) {  //НУЖНА ЭТА ПРОВЕРКА
reader.close(); //а это я поставил после цикла, внутри потока, поскольку иногда всё равно проскакивало
//а с клоузем внутри потока ни разу не проскочило....
P.S. валидатор программа пройдёт даже без этой фичи.... грубо говоря, если вы скопируете правильное решения, там тоже будет запрашивать ввод строк уже после вывода... короче опубликовал для пытливых))