Я создал очень похожую вещь, называемую BlockingReference , где мне нужно, чтобы потребители (один или несколько) могли прочитать последнее значение или блок до тех пор, пока оно не станет доступным.По сути, это похоже на отдельную очередь элементов, поскольку поток производителя может в любое время опубликовать новое значение и затем продолжить.Это актуально, когда единственная информация, которую необходимо опубликовать, это какое-то обновление статуса.Я использую его для обозначения прогресса в многопоточном кеше распределения контента (где один поток загружает контент, и есть несколько потребителей, ретранслирующих загруженные байты).Основное отличие от вас состоит в том, что вы используете одноразовое использование.
Эта реализация значительно превосходит SynchronousQueue
и Exchanger
, поскольку оба они блокируют поток производителя, пока не произойдет передача обслуживания.По производительности он превосходит Scala SyncVar
, так как поток производителя реализован без каких-либо блокировок и функций, поскольку он может поддерживать несколько потребителей.Он был сильно оптимизирован по производительности.
Библиотека Atlassian Concurrency имеет лицензию Apache2 и находится в нашем публичном репозитории Maven.