Подход, который нужно рассмотреть, состоит в том, чтобы ставить в очередь меньше «больших» предметов, чем множество «маленьких» одиночных предметов.
Например, вы можете изменить привязку коллекции к 1 и изменить тип элемента на список элементов. Таким образом, ваш производитель может создать список из 100 элементов и поставить его в очередь, затем потребитель возьмет этот список и обработает его, предоставив производителю возможность начать работу со следующими 100 элементами. Ключевым моментом здесь является то, что производитель будет оптимизирован для создания больших пакетов данных в одном пакете, прежде чем он будет заблокирован в ожидании завершения работы потребителя. В коллекции будет намного меньше побеждать, но производство и потребление все равно будут перекрываться.
Когда потребитель берет список из 100 товаров, он фактически получает половину от общего возможного количества неоплаченных товаров, то есть 200 товаров. Так что концептуально это дает вам ваше условие блокировки.