Search code examples
javaqueuedelaytimeunit

How do i set up a DelayQueue's Delay


I'm just starting out coding in java i'm in struggling with setting up a DelayQueue,

I wanted to have it so,

DelayQueue queue = new DelayQueue();

If (counter > 0){
queue.offer(Integer, *A custom delay*)
} Else {
queue.offer(Integer, *A different custom delay*)
}

I'm just trying to learn all the basics and ive read over the API and cant seem to grasp it.

Thanks in advance


Solution

  • The DelayQueue keeps the elements internally until a certain delay has expired. The elements must implement the interface java.util.concurrent.Delayed.

    For example I have created a class DelayedTest extending Delayed interface. This will implement compareTo and getDelay() method

    public class A{
        public static void main(String... args){
            DelayQueue  dq=new DelayQueue();
            DeleyedTest ob1=new DeleyedTest(10);
            DeleyedTest ob2=new DeleyedTest(5);
            DeleyedTest ob3=new DeleyedTest(15);
    
            dq.offer(ob1);
            dq.offer(ob2);
            dq.offer(ob3);
    
            Iterator itr=dq.iterator();
            while(itr.hasNext()){
                DeleyedTest dt=(DeleyedTest)itr.next();
                System.out.println(dt.deleyTime);
            }
        }
    }
    class DeleyedTest implements Delayed{
        public long deleyTime=0;
        DeleyedTest(long deleyTime){
            this.deleyTime=deleyTime;
        }
    
        @Override
        public int compareTo(Delayed ob) {
            if(this.deleyTime<((DeleyedTest)ob).deleyTime){
                return -1;
            }else if(this.deleyTime>((DeleyedTest)ob).deleyTime){
                return 1;
            }
            return 0;
        }
        @Override
        public long getDelay(TimeUnit unit) {
            return unit.convert(deleyTime-System.currentTimeMillis(),TimeUnit.NANOSECONDS); 
        }
    
    }
    

    Result:

    5
    10
    15