Code example for AtomicInteger

Methods: decrementAndGet, set

0
     * @throws org.wso2.andes.server.queue.MessageCleanupException when an attempt was made to remove the message from the message store and that 
     *                                 failed 
     */ 
    public void decrementReference() 
    { 
        int count = _referenceCount.decrementAndGet();
 
        // note that the operation of decrementing the reference count and then removing the message does not 
        // have to be atomic since the ref count starts at 1 and the exchange itself decrements that after 
        // the message has been passed to all queues. i.e. we are 
        // not relying on the all the increments having taken place before the delivery manager decrements. 
        if (count == 0)
        { 
            // set the reference count way below 0 so that we can detect that the message has been deleted 
            // this is to guard against the message being spontaneously recreated (from the mgmt console) 
            // by copying from other queues at the same time as it is being removed. 
            _referenceCount.set(Integer.MIN_VALUE/2);
 
            // must check if the handle is null since there may be cases where we decide to throw away a message 
            // and the handle has not yet been constructed 
            if (_handle != null)
            {