Ваш производитель может сканировать HashSet, чтобы определить, что является выдающимся.

сейчас у меня есть очередь с несколькими производителями и одним потребителем.

Потребительская резьба работает медленно. Кроме того, потребитель берет элемент из очереди посредством операции просмотра, и пока операция потребления не будет завершена, элемент не может быть удален из очереди. Это связано с тем, что поток производителя как побочная операция также делает снимок всех элементов, которые не были полностью обработаны в этот момент времени.

Теперь я хочу изменить свой код для поддержки нескольких потребителей. Итак, допустим, у меня есть три потока, один поток возьмет первый элемент, который может быть прочитан через операцию просмотра. Второй потребительский поток может перейти ко второму элементу, но у меня нет способа получить его, поскольку очередь не поддерживает извлечение второго элемента.

Итак, возможность использовать стандартную версию ConcurrentLinkedQueue (которую я сейчас использую) отсутствует.

Я думаю об использовании очереди приоритетов, но тогда мне придется связать с каждым элементом флаг, который сообщает мне, используется ли этот элемент каким-либо потоком или нет.

Какая структура данных больше всего подходит для этой проблемы?

Ответы на вопрос(2)

Ваш ответ на вопрос