How do i set up a DelayQueue's Delay

前端 未结 4 958
梦如初夏
梦如初夏 2021-01-19 04:42

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();

         


        
4条回答
  •  攒了一身酷
    2021-01-19 05:07

    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

提交回复
热议问题