Class QueuedMailbox<Msg extends Serializable>

    • Field Detail

      • capacity

        protected int capacity
      • open

        protected boolean open
      • depositBlocks

        protected int depositBlocks
    • Constructor Detail

      • QueuedMailbox

        protected QueuedMailbox​(Class<Msg> msgClass,
                                int capacity)
                         throws RemoteException
        A new QueuedMailbox with given CAPACITY carrying messages of type MSGCLASS. The factory method create, rather than this constructor, is intended for public use.
        Throws:
        RemoteException
    • Method Detail

      • create

        public static <Msg extends SerializableQueuedMailbox<Msg> create​(Class<Msg> msgClass,
                                                                           int capacity)
        A new QueuedMailbox with capacity () fixed at CAPACITY.
      • create

        public static <Msg extends SerializableQueuedMailbox<Msg> create​(int capacity)
        A new QueuedMailbox with capacity () fixed at CAPACITY, with no type checking.
      • deposit

        public void deposit​(Msg msg)
                     throws InterruptedException,
                            RemoteException
        Deposit MSG in this Mailbox. If the Mailbox is full, wait if necessary for space to be available. MSG must be non-null. Throws Interrupted exception and does nothing if current thread is interrupted. Throws an IllegalStateException (or RemoteException) if THIS is closed. Throws IllegalArgumentException if MSG is null.
        Throws:
        InterruptedException
        RemoteException
      • deposit

        public boolean deposit​(Msg msg,
                               long millis)
                        throws InterruptedException,
                               RemoteException
        Deposit MSG in this Mailbox, if this can be done within approximately MILLIS milliseconds. Returns true iff the message was deposited. Does not block if MILLIS is 0. MSG must be non-null. Throws Interrupted exception and does nothing if current thread is interrupted. Throws IllegalStateException (or RemoteException) if THIS is closed. Throws IllegalArgumentException if MSG is null.
        Throws:
        InterruptedException
        RemoteException
      • receive

        public Msg receive()
                    throws InterruptedException
        Receive the next queued message in this Mailbox. Returns null if THIS is closed. Throws Interrupted exception and does nothing if the current thread is interrupted.
        Throws:
        InterruptedException
      • receive

        public Msg receive​(long millis)
                    throws InterruptedException
        Receive the next queued message in this Mailbox, if one is available within MILLIS milliseconds. Returns null otherwise, including if THIS is closed. Does not block if MILLIS is 0. Throws Interrupted exception and does nothing if current thread is interrupted.
        Throws:
        InterruptedException
      • stopForwarding

        public void stopForwarding()
        Stop forwarding copies of messages.
      • flush

        public boolean flush​(long millis)
                      throws InterruptedException
        Wait for all queued messages to be received, or MILLIS milliseconds, whichever comes first. During this wait, the Mailbox acts as if full from the point of view of all threads attempting to deposit. Returns true if all messages were flushed within the time limit.
        Throws:
        InterruptedException
      • close

        public void close​(long millis)
                   throws InterruptedException
        Performs a flush(MILLIS) and then invalidates THIS for all future use, deleting all remaining messages. Any waiting threads or subsequent calls receive an immediate InvalidStateException indicating an invalid state. In general, the thread that uses a Mailbox to send messages is the one that closes it.
        Throws:
        InterruptedException
      • isForwarding

        public boolean isForwarding()
        True iff THIS is currently forwarding messages as a result of forwardTo.
      • isClosed

        public boolean isClosed()
        True iff THIS is closed.
      • capacity

        public int capacity()
        The capacity (see interface comment above) of THIS.
      • enqueue

        protected void enqueue​(Msg msg)
        Place MSG at the end of the message queue.
      • myWait

        protected long myWait​(long limit)
                       throws InterruptedException
        Wait for up to LIMIT milliseconds or the next notify or interrupt. Returns the remaining time.
        Throws:
        InterruptedException
      • messageType

        public Class<Msg> messageType()
        Description copied from interface: Mailbox
        The (runtime) type of message sent through this box.
        Specified by:
        messageType in interface Mailbox<Msg extends Serializable>