Асинхронность выполнения нитей.
1. Класс Note будет использоваться нитями.
2. Создай public static нить NoteThread (Runnable не является нитью),
которая в методе run 1000 раз (index = 0-999) сделает следующие действия:
2.1. Используя метод addNote добавит заметку с именем [getName() + "-Note" + inde
Заметки
- 9
Недоступна
Комментарии (259)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Oraz Janov Backend Developer
30 апреля, 20:54
Стало интересно как с этой задачкой справится ChatGpt . Вот результат

0
Михаил Java Developer
15 апреля, 22:23
Вы решили задачу лучше, чем 42% учеников. Вам удалось ее решить с 1 попытки. Среднее количество попыток для этой задачи 2.03. Всего эту задачу решили 32673 учеников. Ваша награда: x9
0
Виктор
27 марта, 09:43
Чтобы увидеть все варианты принтов описанных в методе removeNote() увеличьте Thread.sleep например до 10 милисекунд. В ином случае у меня одна из нитей вываливалась сразу с IndexOutOfBoundsException и дальше работала только одна нить.
0
Denys SukhoivanExpert
14 марта, 11:44
Как я понял что такое index : Note.notes.get(i);
Как надо было: i
Ну епте))
0
Gans Electro
13 марта, 07:30
ChatGPT:
В приведенной реализации, метод removeNote использует notes.remove(0) для удаления первой заметки из списка. Однако, если notes пустой список, вызов метода remove(0) приведет к выбрасыванию исключения IndexOutOfBoundsException.
Чтобы избежать этой ошибки, следует добавить проверку на пустоту списка перед вызовом метода remove(0).
+1
Gans Electro
13 марта, 07:39
Про условие if (note == null)
"
" +1
Антон
11 марта, 15:22
По условию реализовали что нужно, а как конкретно работает программа для многих осталось загадкой. Какой смысл в таких задачах? Посидеть с дебагом поковырять?
0
Anonymous #3227998
24 мая, 03:29
Уже не первый раз ловлю на мысли себя, что иногда без прямого указания, на то, что же следовало понять из той или иной задачи, очень сложно составить себе картину того, а же что надо было из задачи вынести.
Или то что котята у кошки не могут разбежаться не родившись, или что то еще сногсшибающее🤦♂️
0
Evgenii #3199250 Программер на 1С
20 ноября 2022, 11:27
Очередное задание из разряда "подгони ответ под валидатор".
Вот так не пропускает
надо так:
+3
Dima Darienko
25 ноября 2022, 10:43
второй вариант лучше энивей
0
alexyng7
13 марта, 11:14
Аналогично. Впустую потрачена попытка. Хотя смысл один и тот же.
0
Андрей Федоров Android Developer
1 ноября 2022, 15:17
7 попыток) Потому что я из Note сделал NoteThread )))
0
Daniel CEO в BicycleInventionAcad
12 декабря 2022, 22:15
8
Потому что sleep() валидатору не нравится. Нужен Thread.sleep()
+1
Bingo Boom
18 октября 2022, 13:52
По какой-то причине первый запуск у меня прошёл с ошибкой, а второй нормально
0
Иван Каптюк
4 марта, 13:43
Аналогично)
0
Владимир
7 октября 2022, 12:26
И не совсем понятна под какую ситуацию прописано:
Буду благодарен уважаемым коллегам за разъяснения +1
Daniel CEO в BicycleInventionAcad
12 декабря 2022, 22:20
В треде мы сначала создаем запись в коллекции, потом удаляем ее. Т.е. запись с индексом ноль должна быть единственной имеющейся до удаления. В первой строке метода удаления мы копируем значение записи в note и удаляем из коллекции.
Если note равно null, значит элемент уже кто-то удалил в другом потоке. Тем самым нам показывают параллельную работу потоков по изменению состояния объекта и дают пример проблемы race condition, когда от порядка выполнения потоков планировщиком зависит итоговый результат работы кода.
+1
Екатерина Екатериновна
18 января, 18:47
Этот момент я тоже не поняла и объяснения Daniel меня не устраивают (прости).
Есть строка
В ней мы пытаемся удалить элемент из коллекции и присвоить его переменой note. Элементов null в коллекции быть не может, мы такие не добавляем (а вообще могут?, чет не помню я). Если нет элемента с индексом 0, то возникнет исключение IndexOutOfBoundsException, что собственно у меня в одной из нитей и произошло. Когда может возникнуть ситуация, что note==null. По моему скромному мнению никогда! Или? 0
Aquarus
1 марта, 14:33
Daniel, спасибо, хорошо разжевал!
А то что-то не совсем понял, что сделал (:
0
Aquarus
1 марта, 14:36
Екатерина,
"Если нет элемента с индексом 0..."
да, вопрос в том, что мы получаем IndexOutOfBoundsException при remove(0) если в этот момент наш ArrayList пустой... ндя
0
Daniel CEO в BicycleInventionAcad
1 марта, 21:00
Или
Конкретно в этой программе мы создаем два потока, которые работают с одной коллекцией (notes). И вот вам просто сценарий: первый поток поместил значение к воллекцию под нулевым индексом и заснул. В это время планировщик потоков включил второй поток. Тот перезаписал значение в нулевой индекс и тоже заснул. Первая нить ремувнула запись, которая была помещена в общую коллекцию второй нитью и вывела в консоль, что удалила чужую запись. После этого опять проснулась вторая нить, попыталась удалить нулевой элемент из листа, а его там нет, потому что до этого его уже ремувнули. Вот мы и получаем ситуацию, когда нулевой индекс коллекции не содержит в себе никакой ссылки, а значит там хранится null (значение по умолчанию).
Для того чтобы избежать такой ситуации нужно синхронизировать работу с общими ресурсами. Об этом можно узнать в блоке по многопоточности.
+1