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

  • 9
  • Недоступна
1. Разберись, что делает программа. 1.1. Каждая нить должна читать с консоли слова. Используй готовый static BufferedReader reader. 1.2. Используй AtomicInteger readStringCount, чтобы посчитать, сколько слов уже считано с консоли всеми нитями. 2. Реализуй логику метода run: 2.1. Пока нить не прерва
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (155)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Oleg Zaytsev22 уровень
12 апреля, 18:22
Вы решили задачу лучше, чем 0% учеников. Демоны етить колотить
Владлен19 уровень, Санкт-Петербург
5 апреля, 15:03
Валидатор, ты гонишь))) Ну если требуется проверка reader.ready(), ну какого хрена нужно не принимать задачу, говоря, что мол и не добавляется в list ничего и не увеличивается переменная(хотя это единственное новое, о чём нужно было почитать и разобраться, чем же всё-таки отличается incrementAndGet() от getAndIncrement() и ещё кучи всяких методов =))))
NewBuy19 уровень, Санкт-Петербург
26 марта, 18:24
Опять конченная задача. Поток после проверок ридера (reader.ready() ) прекрасно себе засыпает, и после вывода всех строк на экран просыпается и снова требует ввода. Проверка reader.ready() влияет на работу программы чуть больше, чем никак.
Никита Волотович17 уровень, Минск
18 марта, 11:21
Дурацкая задачка, про reader.ready могли бы и написать
S20 уровень, Минск
17 марта, 13:55
Если в условии задачи JR написано: "Разберись, как работает программа", знай. что задача сделана на отвали.
Андрей28 уровень, Гомель
16 марта, 13:55
С переменной типа AtomicInteger поможет метод:
readStringCount.addAndGet(1);
S20 уровень, Минск
17 марта, 13:50
readStringCount.incrementAndGet()
Александр20 уровень, Казань
25 февраля, 14:41
Столкнулся с проблемой, что после ввода всех данных и получения результатов мы имеем 2 не закрытых потока (readline) - помог конечно же reader,ready - если готов, то тогда считываем и увеличиваем инкремент.
Eugene20 уровень
28 февраля, 20:22
Комментарий очень помог. Спасибо.
Денис23 уровень
19 февраля, 06:49
Насколько я понял, добавляя строку if(reader.ready()) { // чтение строки, добавление в List, инкремент } мы вручную синхронизируем объект reader между тремя нашими потоками. Если ридер занят одним потоком, остальные два крутятся в цикле вхолостую, как только ридер освобождается, его захватывает другой поток.
Sergo17 уровень, Санкт-Петербург
27 января, 16:31
Решить смог только когда все прочитал и погуглил, но я ничего не понял. Помогите разобратся, плиз. 1. Пока поток не прерван !isInterrupted() мы крутим цикл wile. Тут мне непонятно почему мы isInterrupted вызываем без привязки к какому либо классу. Не this.isInterrupted() 2. Выполняем синхронизацию по всем объектам класса. Тут вроде понятно. Все гонятся за добавлением строки к себе в лист. Надо синхронизировать по всем обьектам. 3. Не совсем понял про метод ready(). Сообщает, готов ли этот поток для чтения. Буферизованный символьный поток готов, если буфер не пуст или если основной символьный поток готов. True, если следующий read () гарантированно не заблокирован для ввода, в противном случае - false. Обратите внимание, что возвращение false не гарантирует блокировку следующего чтения. Что блокирует этот read()??? Почему он может быть не готов???
notanord20 уровень, Минск
11 февраля, 11:55
1. isInterrupted() метод класса-родителя Thread, тут не нужно явное определение текущего объекта, т.е. объявление this.isInterrupted() равнозначно isInterrupted(). 2. О какой синхронизации речь? у вас может быть, что поток1 считает строку все 5 раз, которые позволено считать переменной count, а остальные останутся ни с чем. Потому что InputStreamReader тоже поток чтения данных и он может работать только с одним потоком одновременно из четырех в данной программе (mainthread, consolReader1, consolReader2, consolReader3). 3.Что блокирует этот read()??? - другой поток, который открыл reader для считывания (в данном случае) с клавиатуры. Это как значек "открыто/закрыто" в общественном туалете, reader.ready() == true - первый же человек1 (поток1) заходит в кабинку, начинается чтение данных с клавиатуры. Заходит человек2(поток2) в туалет видит reader.ready() == false и выходит ожидать снаружи. Заходят в туалет люди(потоки) не по очереди, а кто быстрее.
Андрей23 уровень, Москва
20 января, 23:40
Хреновая задача. Про reader.ready() непонятно откуда нужно было догадаться.
Antony.Glim29 уровень, Санкт-Петербург
12 февраля, 12:43
Хотя-бы подсказку от ментора написали про reader.ready()
Tanarri19 уровень
10 марта, 10:20
нормальная, там и без него можно.
S20 уровень, Минск
17 марта, 13:51
Так напишите как, раз знаете.
S20 уровень, Минск
17 марта, 13:51
Амиго уже решает без подсказок. А мы все тупые.
Denis Fedotov22 уровень, Москва
22 марта, 17:46
можно, я без решил
Tanarri19 уровень
1 апреля, 07:14
String s = Solution.reader.readLine();
                   if (!s.isEmpty()) {
                       result.add(s);
                       Solution.readStringCount.getAndIncrement();
                   }
Амиго тогда сидел и чесал репу размышляя что будет если приедет пустая строка. Амиго, по опыту прошлых задачек, решил, что ничего хорошего не будет и решил что то делать только с не пустой строкой.