Вот интересно, в этой задаче валидатор ругается "по таймауту" и если убрать reader.ready() то все проходит. Хотя что с ним, что без него у меня отрабатывает одинаково! В задаче "Кто первый встал - того и тапки" валидатор наоборот требует проверки условия reader.ready() (причем требует это совсем не явно, но без этой проверки не проходит) хотя у меня что с ним, что без него результат был одинаков! Может кто-нибудь доходчиво объяснит?
Vas
41 уровень
Вопрос про reader.ready()
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Artur Enterprise Java Developer Expert
9 апреля 2020, 22:13
Не видно вашего кода, поэтому сложно что-то сказать.
0
Vas
11 апреля 2020, 08:35
0
Vas
11 апреля 2020, 08:41
0
Vas
11 апреля 2020, 08:45
Первый листинг - задача "Только по-очереди!". Второй - "Кто первый встал - того и тапки".
В первой задаче валидатор хочет убрать reader.ready(), во второй наоборот добавить. Почему?
0
Artur Enterprise Java Developer Expert
11 апреля 2020, 08:59
В первом примере нити не борются между собой за reader, потому что выполняются такие строки:
То есть, они получают доступ к reader последовательно.
Во втором примере, наоборот, нити получают reader по принципу "Кто первый встал - того и тапки". То есть, если одна нить захватила reader, то другие должны ждать пока этот reader не станет ready.
0
Artur Enterprise Java Developer Expert
11 апреля 2020, 09:26решение
По второму примеру не совсем корректно объяснил, хотелось в двух словах, но смысл исказился. Вот ссылка из обсуждений с подробным объяснением:
https://ru.stackoverflow.com/questions/732637/java-%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-bufferedreader-%D0%BE%D0%B4%D0%BD%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0%BC%D0%B8-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0
+2
Vas
11 апреля 2020, 10:20
Спасибо большое за ссылку! Действительно все объяснено, и дан вариант кода, который отрабатывает правильно. Жаль только, что валидатору подходит и ошибочный код. Из-за этого складывается впечатление в правильности решения задачи.
А по первому примеру я сразу понял, что нити не борются между собой за reader. Мне не понятно почему валидатор не пропускает с if (reader.ready()). Причем ругается на TimeOut.
0
Artur Enterprise Java Developer Expert
11 апреля 2020, 10:43
Пожалуй скопирую сюда этот метод, в нем есть короткое и понятное объяснение:
Таким образом, в цикле дело просто не дойдет до чтения. 3 раза проверит, что пусто, и всё.
0
Artur Enterprise Java Developer Expert
11 апреля 2020, 10:50
Поправка: в моем коде был цикл for (int i=0; i<3; i++)
В вашем случае будет таймаут, потому что будет бесконечно проверять.
0