Class MpscCompoundQueue<E>

All Implemented Interfaces:
Iterable<E>, Collection<E>, Queue<E>, MessagePassingQueue<E>

public class MpscCompoundQueue<E> extends MpscCompoundQueueConsumerQueueIndex<E>
  • Field Details

    • b000

      byte b000
    • b001

      byte b001
    • b002

      byte b002
    • b003

      byte b003
    • b004

      byte b004
    • b005

      byte b005
    • b006

      byte b006
    • b007

      byte b007
    • b010

      byte b010
    • b011

      byte b011
    • b012

      byte b012
    • b013

      byte b013
    • b014

      byte b014
    • b015

      byte b015
    • b016

      byte b016
    • b017

      byte b017
    • b020

      byte b020
    • b021

      byte b021
    • b022

      byte b022
    • b023

      byte b023
    • b024

      byte b024
    • b025

      byte b025
    • b026

      byte b026
    • b027

      byte b027
    • b030

      byte b030
    • b031

      byte b031
    • b032

      byte b032
    • b033

      byte b033
    • b034

      byte b034
    • b035

      byte b035
    • b036

      byte b036
    • b037

      byte b037
    • b040

      byte b040
    • b041

      byte b041
    • b042

      byte b042
    • b043

      byte b043
    • b044

      byte b044
    • b045

      byte b045
    • b046

      byte b046
    • b047

      byte b047
    • b050

      byte b050
    • b051

      byte b051
    • b052

      byte b052
    • b053

      byte b053
    • b054

      byte b054
    • b055

      byte b055
    • b056

      byte b056
    • b057

      byte b057
    • b060

      byte b060
    • b061

      byte b061
    • b062

      byte b062
    • b063

      byte b063
    • b064

      byte b064
    • b065

      byte b065
    • b066

      byte b066
    • b067

      byte b067
    • b070

      byte b070
    • b071

      byte b071
    • b072

      byte b072
    • b073

      byte b073
    • b074

      byte b074
    • b075

      byte b075
    • b076

      byte b076
    • b077

      byte b077
    • b100

      byte b100
    • b101

      byte b101
    • b102

      byte b102
    • b103

      byte b103
    • b104

      byte b104
    • b105

      byte b105
    • b106

      byte b106
    • b107

      byte b107
    • b110

      byte b110
    • b111

      byte b111
    • b112

      byte b112
    • b113

      byte b113
    • b114

      byte b114
    • b115

      byte b115
    • b116

      byte b116
    • b117

      byte b117
    • b120

      byte b120
    • b121

      byte b121
    • b122

      byte b122
    • b123

      byte b123
    • b124

      byte b124
    • b125

      byte b125
    • b126

      byte b126
    • b127

      byte b127
    • b130

      byte b130
    • b131

      byte b131
    • b132

      byte b132
    • b133

      byte b133
    • b134

      byte b134
    • b135

      byte b135
    • b136

      byte b136
    • b137

      byte b137
    • b140

      byte b140
    • b141

      byte b141
    • b142

      byte b142
    • b143

      byte b143
    • b144

      byte b144
    • b145

      byte b145
    • b146

      byte b146
    • b147

      byte b147
    • b150

      byte b150
    • b151

      byte b151
    • b152

      byte b152
    • b153

      byte b153
    • b154

      byte b154
    • b155

      byte b155
    • b156

      byte b156
    • b157

      byte b157
    • b160

      byte b160
    • b161

      byte b161
    • b162

      byte b162
    • b163

      byte b163
    • b164

      byte b164
    • b165

      byte b165
    • b166

      byte b166
    • b167

      byte b167
    • b170

      byte b170
    • b171

      byte b171
    • b172

      byte b172
    • b173

      byte b173
    • b174

      byte b174
    • b175

      byte b175
    • b176

      byte b176
    • b177

      byte b177
  • Constructor Details

    • MpscCompoundQueue

      public MpscCompoundQueue(int capacity)
    • MpscCompoundQueue

      public MpscCompoundQueue(int capacity, int queueParallelism)
  • Method Details

    • offer

      public boolean offer(E e)
      Description copied from interface: MessagePassingQueue
      Called from a producer thread subject to the restrictions appropriate to the implementation and according to the Queue.offer(Object) interface.
      Parameters:
      e - not null, will throw NPE if it is
      Returns:
      true if element was inserted into the queue, false iff full
    • slowOffer

      private boolean slowOffer(MpscArrayQueue<E>[] queues, int parallelQueuesMask, int start, E e)
    • poll

      public E poll()
      Description copied from interface: MessagePassingQueue
      Called from the consumer thread subject to the restrictions appropriate to the implementation and according to the Queue.poll() interface.
      Returns:
      a message from the queue if one is available, null iff empty
    • peek

      public E peek()
      Description copied from interface: MessagePassingQueue
      Called from the consumer thread subject to the restrictions appropriate to the implementation and according to the Queue.peek() interface.
      Returns:
      a message from the queue if one is available, null iff empty
    • size

      public int size()
      Description copied from interface: MessagePassingQueue
      This method's accuracy is subject to concurrent modifications happening as the size is estimated and as such is a best effort rather than absolute value. For some implementations this method may be O(n) rather than O(1).
      Specified by:
      size in interface Collection<E>
      Specified by:
      size in interface MessagePassingQueue<E>
      Specified by:
      size in class AbstractCollection<E>
      Returns:
      number of messages in the queue, between 0 and Integer.MAX_VALUE but less or equals to capacity (if bounded).
    • iterator

      public Iterator<E> iterator()
      Specified by:
      iterator in interface Collection<E>
      Specified by:
      iterator in interface Iterable<E>
      Specified by:
      iterator in class AbstractCollection<E>
    • toString

      public String toString()
      Overrides:
      toString in class AbstractCollection<E>
    • relaxedOffer

      public boolean relaxedOffer(E e)
      Description copied from interface: MessagePassingQueue
      Called from a producer thread subject to the restrictions appropriate to the implementation. As opposed to Queue.offer(Object) this method may return false without the queue being full.
      Parameters:
      e - not null, will throw NPE if it is
      Returns:
      true if element was inserted into the queue, false if unable to offer
    • relaxedPoll

      public E relaxedPoll()
      Description copied from interface: MessagePassingQueue
      Called from the consumer thread subject to the restrictions appropriate to the implementation. As opposed to Queue.poll() this method may return null without the queue being empty.
      Returns:
      a message from the queue if one is available, null if unable to poll
    • relaxedPeek

      public E relaxedPeek()
      Description copied from interface: MessagePassingQueue
      Called from the consumer thread subject to the restrictions appropriate to the implementation. As opposed to Queue.peek() this method may return null without the queue being empty.
      Returns:
      a message from the queue if one is available, null if unable to peek
    • capacity

      public int capacity()
      Returns:
      the capacity of this queue or MessagePassingQueue.UNBOUNDED_CAPACITY if not bounded
    • drain

      public int drain(MessagePassingQueue.Consumer<E> c)
      Description copied from interface: MessagePassingQueue
      Remove all available item from the queue and hand to consume. This should be semantically similar to:
       M m;
       while((m = relaxedPoll()) != null){
       c.accept(m);
       }
       
      There's no strong commitment to the queue being empty at the end of a drain. Called from a consumer thread subject to the restrictions appropriate to the implementation.

      WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Consumer.accept(T) make sure you have read and understood these before using this method.

      Returns:
      the number of polled elements
    • fill

      public int fill(MessagePassingQueue.Supplier<E> s)
      Description copied from interface: MessagePassingQueue
      Stuff the queue with elements from the supplier. Semantically similar to:
       while(relaxedOffer(s.get());
       
      There's no strong commitment to the queue being full at the end of a fill. Called from a producer thread subject to the restrictions appropriate to the implementation.

      Unbounded queues will fill up the queue with a fixed amount rather than fill up to oblivion. WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Supplier.get() make sure you have read and understood these before using this method.

      Returns:
      the number of offered elements
    • drain

      public int drain(MessagePassingQueue.Consumer<E> c, int limit)
      Description copied from interface: MessagePassingQueue
      Remove up to limit elements from the queue and hand to consume. This should be semantically similar to:

      
         M m;
         int i = 0;
         for(;i < limit && (m = relaxedPoll()) != null; i++){
           c.accept(m);
         }
         return i;
       

      There's no strong commitment to the queue being empty at the end of a drain. Called from a consumer thread subject to the restrictions appropriate to the implementation.

      WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Consumer.accept(T) make sure you have read and understood these before using this method.

      Returns:
      the number of polled elements
    • fill

      public int fill(MessagePassingQueue.Supplier<E> s, int limit)
      Description copied from interface: MessagePassingQueue
      Stuff the queue with up to limit elements from the supplier. Semantically similar to:

      
         for(int i=0; i < limit && relaxedOffer(s.get()); i++);
       

      There's no strong commitment to the queue being full at the end of a fill. Called from a producer thread subject to the restrictions appropriate to the implementation. WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Supplier.get() make sure you have read and understood these before using this method.

      Returns:
      the number of offered elements
    • drain

      Description copied from interface: MessagePassingQueue
      Remove elements from the queue and hand to consume forever. Semantically similar to:

        int idleCounter = 0;
        while (exit.keepRunning()) {
            E e = relaxedPoll();
            if(e==null){
                idleCounter = wait.idle(idleCounter);
                continue;
            }
            idleCounter = 0;
            c.accept(e);
        }
       

      Called from a consumer thread subject to the restrictions appropriate to the implementation.

      WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Consumer.accept(T) make sure you have read and understood these before using this method.

    • fill

      Description copied from interface: MessagePassingQueue
      Stuff the queue with elements from the supplier forever. Semantically similar to:

       
        int idleCounter = 0;
        while (exit.keepRunning()) {
            E e = s.get();
            while (!relaxedOffer(e)) {
                idleCounter = wait.idle(idleCounter);
                continue;
            }
            idleCounter = 0;
        }
       
       

      Called from a producer thread subject to the restrictions appropriate to the implementation. The main difference being that implementors MUST assure room in the queue is available BEFORE calling MessagePassingQueue.Supplier.get(). WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Supplier.get() make sure you have read and understood these before using this method.