14.DelayQueue

  1. 带有延迟时间的queue,其中的元素只有当它指定的延迟时间到了,才能从队列中获取该指定的元素,DelayQueue中的元素必须实现Delayed接口,它是一个没有大小限制的队列,应用场景比较多,比如缓存超时的数据移除,任务超时处理,空闲连接关闭等。
  2.  
  3. public class Wangmin implements Delayed { 
  4.    
  5.     private String name
  6.     //身份证 
  7.     private String id
  8.     //截止时间 
  9.     private long endTime
  10.     //定义时间工具类
  11.     private TimeUnit timeUnit = TimeUnit.SECONDS;
  12.      
  13.     public Wangmin(String name,String id,long endTime){ 
  14.         this.name=name
  15.         this.id=id
  16.         this.endTime = endTime
  17.     } 
  18.      
  19.     public String getName(){ 
  20.         return this.name
  21.     } 
  22.      
  23.     public String getId(){ 
  24.         return this.id
  25.     } 
  26.      
  27.     /**
  28.      * 用来判断是否到了截止时间
  29.      */ 
  30.     @Override 
  31.     public long getDelay(TimeUnit unit) {
  32.         //return unit.convert(endTime, TimeUnit.MILLISECONDS) - unit.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
  33.        return endTime - System.currentTimeMillis();
  34.     } 
  35.  
  36.     /**
  37.      * 相互批较排序用
  38.      */ 
  39.     @Override 
  40.     public int compareTo(Delayed delayed) { 
  41.        Wangmin w = (Wangmin)delayed
  42.         return this.getDelay(this.timeUnit) - w.getDelay(this.timeUnit) > 0 ? 1:0; 
  43.     } 
  44.    
  45.  
  46. public class WangBa implements Runnable { 
  47.    
  48.     private DelayQueue<Wangmin> queue = new DelayQueue<Wangmin>(); 
  49.    
  50.     public boolean yinye =true
  51.      
  52.     public void shangji(String name,String id,int money){ 
  53.         Wangmin man = new Wangmin(name, id, 1000 * money + System.currentTimeMillis()); 
  54.         System.out.println("网名"+man.getName()+" 身份证"+man.getId()+"交钱"+money+",开始上机..."); 
  55.         this.queue.add(man); 
  56.     } 
  57.      
  58.     public void xiaji(Wangmin man){ 
  59.         System.out.println("网名"+man.getName()+" 身份证"+man.getId()+"时间到下机..."); 
  60.     } 
  61.  
  62.     @Override 
  63.     public void run() { 
  64.         while(yinye){ 
  65.             try
  66.                 Wangmin man = queue.take(); 
  67.                 xiaji(man); 
  68.             } catch (InterruptedException e) { 
  69.                 e.printStackTrace(); 
  70.             } 
  71.         } 
  72.     } 
  73.      
  74.     public static void main(String args[]){ 
  75.         try
  76.             System.out.println("网吧开始营业"); 
  77.             WangBa siyu = new WangBa(); 
  78.             Thread shangwang = new Thread(siyu); 
  79.             shangwang.start(); 
  80.              
  81.             siyu.shangji("路人甲", "123", 1); 
  82.             siyu.shangji("路人乙", "234", 10); 
  83.             siyu.shangji("路人丙", "345", 5); 
  84.         } 
  85.         catch(Exception e){ 
  86.             e.printStackTrace();
  87.         } 
  88.  
  89.     } 
  90. 输出结果:
  91. 网吧开始营业
  92. 网名路人甲 身份证123交钱1,开始上机...
  93. 网名路人乙 身份证234交钱10,开始上机...
  94. 网名路人丙 身份证345交钱5,开始上机...
  95. 网名路人甲 身份证123时间到下机...
  96. 网名路人丙 身份证345时间到下机...
  97. 网名路人乙 身份证234时间到下机...
  98.  
  99.  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值