文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

DelayQueue怎么在Java多线程并发开发中使用

2023-05-31 03:24

关注

这篇文章给大家介绍DelayQueue怎么在Java多线程并发开发中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Delayed,一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。此接口的实现必须定义一个 compareTo 方法,该方法提供与此接口的 getDelay 方法一致的排序。

在网上看到了一些示例,发现有的示例存在一些问题,做了些修改,希望能帮助大家理解。

中国人都喜欢K歌,大部分人的内心都住着一个歌手的梦,尤其是学生时代,大家都喜欢组团去KTV唱歌,一唱一下午,大家都唱得很爽。话说又到了一年一度的双11,许多的单身狗开始组团来到KTV唱歌。那么KTV这个时候如何通过程序来收费记时的呢,模拟的代码如下:

public class KTV implements Runnable{  private DelayQueue<KTVConsumer> queue = new DelayQueue<>();  public void begin(String name,String boxNum,int money){    KTVConsumer man = new KTVConsumer(name,boxNum,20l*money+System.currentTimeMillis());    System.out.println(man.getName()+" 等人交了"+money+"元钱,进入"+man.getBoxNum()+"号包厢,开始K歌...");    this.queue.add(man);  }  public void end(KTVConsumer man){    System.out.println(man.getName()+" 等人所在的"+man.getBoxNum()+"号包厢,时间到...");  }  @Override  public void run() {    // TODO Auto-generated method stub    while(true){      try {        KTVConsumer man = queue.take();        end(man);      } catch (InterruptedException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    }  }  public static void main(String args[]){    try{      System.out.println("KTV正常营业");      System.out.println("================================");      KTV ktv = new KTV();      Thread sing = new Thread(ktv);      sing.start();      new Thread(new Runnable() {        @Override        public void run() {          ktv.begin("张三", "111", 500);        }      }).start();      new Thread(new Runnable() {        @Override        public void run() {          ktv.begin("李四", "666", 200);        }      }).start();      Thread.sleep(2000);      new Thread(new Runnable() {        @Override        public void run() {          ktv.begin("王五", "888", 100);          System.out.println("================================");        }      }).start();    }    catch(Exception ex){    }  }}public class KTVConsumer implements Delayed{  private String name;  //截止时间  private long endTime;  //包厢号  private String boxNum;  public KTVConsumer(String name,String boxNum,long endTime){    this.name=name;    this.boxNum=boxNum;    this.endTime=endTime;  }  public String getName(){    return this.name;  }  public String getBoxNum(){    return this.boxNum;  }    @Override  public long getDelay(TimeUnit unit) {    // TODO Auto-generated method stub    return unit.convert(endTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);  }    @Override  public int compareTo(Delayed o) {    // TODO Auto-generated method stub    if(o == null || ! (o instanceof KTVConsumer)) return 1;    if(o == this) return 0;    KTVConsumer s = (KTVConsumer)o;    return endTime - s.endTime > 0 &#63; 1 :(endTime - s.endTime == 0 &#63; 0 : -1);  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯