Остановка потоков обработки данных при помощи "Отравления очереди"
Запись от Ovederax размещена 09.04.2019 в 17:07
Показов 1209
Комментарии 0
Метки java
|
Недавно я узнал о интересном способе остановки потоков, занятых чтением данных из очереди, в которую периодически могут поступать данные. Преподаватель назвал этот способ "Отравлением очереди". Его идея заключается в том, чтобы определить некоторый объект как недопустимый для очереди, чтобы он никак не мог там оказаться случайно. Этот объект будет ядом. После завершения потоков записи этот яд добавляется в очередь. Потоки чтения заканчивают обрабатывать очередь допустимых данных и натыкаются на отраву. Обнаружив ее они завершают работу с очередью. Этот метод был применен для следующей учебной задачи: Доступные средства: Java, классы пакета и подпакетов java.util.concurent.* Нужно реализовать очередь данных, данные представлены классом Data с полем int[] data внутри. Имеются потоки чтения и потоки записи работающие с этой очередью. Потоки записи соответственно ставят некоторое конечное число объектов Data в очередь. Потоки чтения берут данные из очереди и распечатывают их, при этом не знают сколько всего поступит объектов в очередь. В некоторый момент данные перестают поступать в очередь и необходимо прекратить попытки считать из нее данные и последовательно завершить все потоки. В целях синхронизации и обеспечения безопасного совместного доступа к данным была применена очередь ArrayBlockingQueue. У этой очереди имеются методы take() и put() блокирующие вставку объектов если очередь пуста и получение объектов при пустой очереди. Подробней про блокирующие очереди. Код, решающий эту задачу и использующий описанную идею
| |||||
Метки java
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


