DelayQueue
来源:互联网 发布:apache源码包下载地址 编辑:程序博客网 时间:2024/05/30 23:01
DelayQueue就是一个优先级队列,他的优先级按照里面元素的延迟时间来决定,延迟时间小的(也就是时间先到的)放在队列头(这与add的顺序无关),与元素本身的属性值有关。
DelayQueue中的元素必须是实现了Delayed接口的,而Delayed接口又是Comparable的子接口,因此DelayQueue中的元素必须覆盖Delayed接口的getDelay(TimeUnit)方法和Comparable的compareTo()方法,其实两个方法的实现都很简单。
前者:
public long getDelay(TimeUnit tu)
{
return time.System.currentTimeMillis();
}
后者:
public int compareTo(Delayed d)
{
T t=(T)d;
if(time<d.getTime())//如果自己比人家小,返回负值
return -1;
else if(time>d.getTime())//如果自己比人家大,返回正值
return 1;
else return 0;
}
关于DelayQueue的代码如下:
大家会发现,Customer中有个属性time,这个属性是绝对时间,即希望当前对象被执行的时间,getDelay是覆盖Delayed的函数,这个函数返回相对的时间,系统也正是利用这个来判断还有多长时间要执行某个对象。而compareTo用来确定队列中对象的先后顺序,当然希望从小打到大排序。
DelayQueue中的元素必须是实现了Delayed接口的,而Delayed接口又是Comparable的子接口,因此DelayQueue中的元素必须覆盖Delayed接口的getDelay(TimeUnit)方法和Comparable的compareTo()方法,其实两个方法的实现都很简单。
前者:
public long getDelay(TimeUnit tu)
{
return time.System.currentTimeMillis();
}
后者:
public int compareTo(Delayed d)
{
T t=(T)d;
if(time<d.getTime())//如果自己比人家小,返回负值
return -1;
else if(time>d.getTime())//如果自己比人家大,返回正值
return 1;
else return 0;
}
关于DelayQueue的代码如下:
import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;import java.util.concurrent.DelayQueue;public class TestDelayQueue{public static void checkin(Customer cus,DelayQueue queue){queue.add(cus);System.out.println("网民"+cus.getId()+":开始上机");}public static void main(String [] args){DelayQueue<Customer> queue=new DelayQueue<Customer>();Customer cus1=new Customer("1",10000+System.currentTimeMillis());Customer cus2=new Customer("2",50000+System.currentTimeMillis());Customer cus3=new Customer("3",20000+System.currentTimeMillis());checkin(cus1,queue);checkin(cus2,queue);checkin(cus3,queue);while(queue.size()>0){try{Customer off=queue.take();System.out.println("网民"+off.getId()+":下机");}catch (Exception e){e.printStackTrace();}}System.out.println("网吧内已经没有顾客");}}class Customer implements Delayed{private String id;private long time;public Customer(String id,long time){this.id=id;this.time=time;}public String getId(){return this.id;}public long getTime(){return time;}public long getDelay(TimeUnit tu){return time-System.currentTimeMillis();}public int compareTo(Delayed d)//当前比外来户小返回负值,当前比外来户大返回正值{Customer c=(Customer)d;if(time>c.getTime())return 1;else if(time<c.getTime())return -1;else return 0;}}
大家会发现,Customer中有个属性time,这个属性是绝对时间,即希望当前对象被执行的时间,getDelay是覆盖Delayed的函数,这个函数返回相对的时间,系统也正是利用这个来判断还有多长时间要执行某个对象。而compareTo用来确定队列中对象的先后顺序,当然希望从小打到大排序。
0 0
- DelayQueue
- DelayQueue
- DelayQueue
- DelayQueue
- DelayQueue
- DelayQueue
- DelayQueue
- DelayQueue
- delayqueue
- DelayQueue
- DelayQueue 队列
- DelayQueue 用法
- DelayQueue Demo
- DelayQueue 试用
- java DelayQueue
- DelayQueue Demo
- DelayQueue 队列
- DelayQueue 队列
- linux文件目录操作命令 tail
- iOS利用代码添加事件到系统日历中
- 第23篇 Linux下布署AppRTC
- (五)员工管理实现模块初步
- iOS 去掉首尾空格和换行符
- DelayQueue
- copy和mutablecopy
- compareTo
- JavaScript计算两个日期之间相差的天数
- SAX
- 原生js使用forEach()与jquery使用each遍历数组,return false 的区别
- 一个自定义注释的例子
- 反射机制实现方法调用
- java实现简单AOP(二)