- 带有延迟时间的queue,其中的元素只有当它指定的延迟时间到了,才能从队列中获取该指定的元素,DelayQueue中的元素必须实现Delayed接口,它是一个没有大小限制的队列,应用场景比较多,比如缓存超时的数据移除,任务超时处理,空闲连接关闭等。
- public class Wangmin implements Delayed {
- private String name;
- //身份证
- private String id;
- //截止时间
- private long endTime;
- //定义时间工具类
- private TimeUnit timeUnit = TimeUnit.SECONDS;
- public Wangmin(String name,String id,long endTime){
- this.name=name;
- this.id=id;
- this.endTime = endTime;
- }
- public String getName(){
- return this.name;
- }
- public String getId(){
- return this.id;
- }
- /**
- * 用来判断是否到了截止时间
- */
- @Override
- public long getDelay(TimeUnit unit) {
- //return unit.convert(endTime, TimeUnit.MILLISECONDS) - unit.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
- return endTime - System.currentTimeMillis();
- }
- /**
- * 相互批较排序用
- */
- @Override
- public int compareTo(Delayed delayed) {
- Wangmin w = (Wangmin)delayed;
- return this.getDelay(this.timeUnit) - w.getDelay(this.timeUnit) > 0 ? 1:0;
- }
- }
- public class WangBa implements Runnable {
- private DelayQueue<Wangmin> queue = new DelayQueue<Wangmin>();
- public boolean yinye =true;
- public void shangji(String name,String id,int money){
- Wangmin man = new Wangmin(name, id, 1000 * money + System.currentTimeMillis());
- System.out.println("网名"+man.getName()+" 身份证"+man.getId()+"交钱"+money+"块,开始上机...");
- this.queue.add(man);
- }
- public void xiaji(Wangmin man){
- System.out.println("网名"+man.getName()+" 身份证"+man.getId()+"时间到下机...");
- }
- @Override
- public void run() {
- while(yinye){
- try {
- Wangmin man = queue.take();
- xiaji(man);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- public static void main(String args[]){
- try{
- System.out.println("网吧开始营业");
- WangBa siyu = new WangBa();
- Thread shangwang = new Thread(siyu);
- shangwang.start();
- siyu.shangji("路人甲", "123", 1);
- siyu.shangji("路人乙", "234", 10);
- siyu.shangji("路人丙", "345", 5);
- }
- catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- 输出结果:
- 网吧开始营业
- 网名路人甲 身份证123交钱1块,开始上机...
- 网名路人乙 身份证234交钱10块,开始上机...
- 网名路人丙 身份证345交钱5块,开始上机...
- 网名路人甲 身份证123时间到下机...
- 网名路人丙 身份证345时间到下机...
- 网名路人乙 身份证234时间到下机...
14.DelayQueue
最新推荐文章于 2024-07-20 11:05:16 发布