У меня есть вычисление (шифрование CTR), которое требует результатов в точном порядке.Java: результаты заказа, полученные из асинхронных задач
Для этого я создал многопоточный дизайн, который вычисляет указанные результаты, в этом случае результатом является ByteBuffer. Само вычисление, конечно, выполняется асинхронно, поэтому результаты могут быть доступны в любое время и в любом порядке. «Пользователь» - однопоточное приложение, которое использует результаты, вызывая метод, после чего байтовые буферы возвращаются в пул ресурсов указанным методом - управление ресурсами уже обрабатывается (с использованием поточного безопасного стека).
Теперь вопрос: мне нужно что-то, что агрегирует результаты и делает их доступными в в правильном порядке. Если следующий результат недоступен, метод, который должен вызвать пользователь, должен блокироваться до тех пор, пока он не будет. Кто-нибудь знает хорошую стратегию или класс в java.util.concurrent, который может возвращать асинхронно рассчитанные результаты в порядке?
Решение должно быть потокобезопасным. Я хотел бы избежать сторонних библиотек, Thread.sleep()/Thread.wait() и тегов, связанных с другими словами, отличными от «synchronized». Более того, задачи могут быть заданы, например, Исполнитель в правильном порядке, если это требуется. Это для исследований, поэтому не стесняйтесь использовать Java 1.6 или даже 1.7 конструкции.
Примечание: Я отметил те запросы, которые я хочу сохранить в классах, определенных в JRE и [шифровании], поскольку кому-то, возможно, уже пришлось иметь дело с этим, но сам вопрос касается исключительно Java & многопоточность.
Почему бы не создать массив ByteBuffer и передать Bytebuffer в потоки? Когда все потоки выполняются, просто напишите ByteBuffers в порядке массива – fge
Я удалил тег 'encryption', поскольку это не имеет никакого отношения к шифрованию. –