/// <summary>
        /// Creates new queue
        /// </summary>
        /// <param name="maxPriority">Maximum priority</param>
        /// <param name="maxParallelUsingItemsCount">Maximum allowed items to dequeue with same address value</param>
        public ConcurrentQueueWithPriorityAndAddressUsageControl(int maxPriority, int maxParallelUsingItemsCount)
        {
            _maxParallelUsingItemsCount = maxParallelUsingItemsCount;
            _itemCollections            = new List <List <AddressedItem <TKey, TItem> > >();

            for (int i = 0; i < maxPriority; ++i)
            {
                _itemCollections.Add(new List <AddressedItem <TKey, TItem> >());
            }

            _itemCounters = new WaitableMultiCounter <TKey>();
        }