java DelayedQueue delay queue

 

code show as below:

package com.example.base.concurrent;

import java.util.Date;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

import com.example.spring.MyLog;

public class MyDelayedQueue {
    public static void main(String[] args) throws InterruptedException {
        test();
    }
    private static void test() throws InterruptedException {
        DelayQueue<DelayedTask> queue = newA DelayQueue <> (); 
        Producer (Queue); 
        MyLog.info ( "Start from Take Task Queue" );
         // cycle takes data from the queue 
        the while (! Queue.isEmpty ()) {
             // data only due to taken out, otherwise blocking wait 
            MyLog.info (queue.take ()); 
        } 
        
    } 
    Private  static  void Producer (a DelayQueue <DelayedTask> Queue) {
         for ( int I = 0; I <10; I ++ ) { 
            queue.put ( new new DelayedTask ((10 - I) * 1000, "DELAYED taask" + I)); 
        } 
    } 
    
    public static void info(Object object) {
        System.out.println(new Date() + " [" + Thread.currentThread().getName() + "] " + object);
    }
    
    private static class DelayedTask implements Delayed {
        private long delay;
        private long expire;
        private String msg;
        
        public DelayedTask(long delay, String msg) {
            this.delay = delay;
            this.msg = msg;
            this= System.currentTimeMillis .expire () + Delay; 
        } 

        / ** 
         * for delaying the internal queue are sorted on the first head of the queue expires, take to ensure that it is due 
         * / 
        @Override 
        public  int the compareTo (the DelayedPause O) {
             return ( int ) ( the this .getDelay (TimeUnit.MILLISECONDS) - o.getDelay (TimeUnit.MILLISECONDS)); 
        } 

        / ** 
         * specified expiration time calculation rule 
         * / 
        @Override 
        public  Long getDelay (TimeUnit Unit) {
             return unit.convert ( the this .expire -  System.currentTimeMillis (), TimeUnit.MILLISECONDS);
        } 

        @Override 
        public String toString() {
            return "DelayedTask [delay=" + delay + ", expire=" + expire + ", msg=" + msg + "]";
        }
    }
}

Execution results are as follows:

2019-07-14T11:57:36.440+08:00 INFO [main] [MyDelayedQueue.java@test:17] -start take task from queue
2019-07-14T11:57:37.186+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=1000, expire=1563076657181, msg=delayed taask9]
2019-07-14T11:57:38.182+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=2000, expire=1563076658181, msg=delayed taask8]
2019-07-14T11:57:39.181+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=3000, expire=1563076659181, msg=delayed taask7]
2019-07-14T11:57:40.182+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=4000, expire=1563076660181, msg=delayed taask6]
2019-07-14T11:57:41.182+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=5000, expire=1563076661181, msg=delayed taask5]
2019-07-14T11:57:42.182+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=6000, expire=1563076662181, msg=delayed taask4]
2019-07-14T11:57:43.182+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=7000, expire=1563076663181, msg=delayed taask3]
2019-07-14T11:57:44.181+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=8000, expire=1563076664181, msg=delayed taask2]
2019-07-14T11:57:45.181+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=9000, expire=1563076665180, msg=delayed taask1]
2019-07-14T11:57:46.182+08:00 INFO [main] [MyDelayedQueue.java@test:19] -DelayedTask [delay=10000, expire=1563076666180, msg=delayed taask0]

 

Guess you like

Origin www.cnblogs.com/gc65/p/11183771.html