Producer–consumer

  • 14
  • Недоступна
В классе TransferObject расставь вызовы методов wait/notify/notifyAll, чтобы обеспечить последовательное создание и получение объекта. В методах run классов ConsumerTask и ProducerTask создай необходимые synchronized блоки. Ожидаемый вывод: ... Put: M Got: M Put: N Got: N Put: K Got: K ... где M, N,
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (33)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Dzmitry Huletski30 уровень, Минск
13 мая, 18:00
Тут нити работают две, соответственно в данном случае notify и notifyAll эквивалентны? Правильно я понимаю, или глупость сказал?
Даниил29 уровень
3 мая, 20:33
Странный валидатор. Не читал требования, только задание. Добился стабильной и правильной работы доработав код только в методах get и put (использовал wait в цикле вайл по правильному значению переменной isValuePresent для каждого метода и её изменение на нужное значение следуя логике программы перед вызовом notifyAll в конце каждого метода). И валидатор, падла, не принял потому что видители непонятно зачем ему нужны были synchronized блоки в методах run. Зачем они там я не понял... Может кто объяснит дураку?
S3R3N1TY33 уровень, Санкт-Петербург
16 марта, 14:51
Проверку прошло и вывод верный, только случаются дедлоки. В чем может быть дело ? notify() везде в блоках у меня в самом конце, пробовал с notifyAll тоже самое. Все писали нотифайл в блоке файнали ?
} finally {
    this.notify();
}
Юрий41 уровень, Минск
21 марта, 19:10
все из-за последовательности вызова weit notify и назначения булевой переменной
RuslanN35 уровень, Нижний Новгород
29 января, 13:43
написал проверку isValuePresent == false - Вали не принял Ему нужно !isValuePresent
Vitaly Khan37 уровень
8 января, 03:12
полезная задачка. можно поэкспериментировать с этими wait, notify...
Philip J.40 уровень
6 сентября 2018, 20:39
Сервер и клиент запускаются одновременно в разных нитях. Сервер сразу же пытается вывести письмо на экран, но его нет, так как клиент спит 1000 мс перед отправкой. Нужно заставить сервер ждать. Через 1000 мс клиент напишет письмо и разбудит сервер, чтобы он вывел текст на экран.
Yurii Koval40 уровень
4 сентября 2018, 12:28
Если написать
while( this.isValuePresent) {...}
то валя не примет. А если написать
while(isValuePresent){...}
то все ок.
Nikita Krutov41 уровень, Москва
3 июля 2018, 07:44
несколько замудрённая задача, но если следовать требованиям, то всё работает - главное правельно обозначить условия в циклах: для get (!isValuePresent) , а для put (isValuePresent).
Andrei Pilipuk31 уровень, Киев
30 марта, 10:13
Так не принимает, требует обратное значение для isValuePresent с методом wait
18 мая 2018, 04:30
Всем доброго времени суток! Кто нибудь может объяснить почему мое решение прошло проверку у валли, а результат вывода получается всего 1 строка: Put: 1 И все...? При неоднократном тестировании. И это очень настораживает...
Divertitto40 уровень, Днепр
10 сентября 2018, 14:47
Скинь код
Victoria Sedletskaya35 уровень, Одесса
8 января, 20:19
наверное, вы в методе run() весь цикл заключили в synchronized , а валик просто проверяет чтоб он был
23 марта 2018, 14:11
Следим за случайными пробудками))
Vitaly Khan37 уровень
8 января, 03:08
заменил while на if в правильном решении... и не обнаружил случайных пробудок) наверно, фаза луны не та.... (источник)