这篇文章给大家介绍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 ? 1 :(endTime - s.endTime == 0 ? 0 : -1); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机DelayQueue怎么在Java多线程并发开发中使用
后端开发2023-05-31
Java多线程并发ReentrantLock怎么使用
后端开发2023-07-02
怎么在java中实现多线程高并发
后端开发2023-06-14
怎么在Java并发包中使用ThreadPoolExecutor线程池
后端开发2023-06-15
Java Thread多线程开发中Object类怎么使用
后端开发2023-07-05
Java多线程并发FutureTask使用详解
后端开发2024-04-02
Java并发之怎么使用线程池
后端开发2023-06-16
如何在Java中使用并发容器来优化多线程程序?
后端开发2023-09-19
java多线程并发执行怎么实现
后端开发2023-09-27
java怎么实现多线程并发执行
后端开发2023-10-25
C#开发中如何使用多线程并发访问数据库
后端开发2023-10-22
pytest多线程与多设备并发appium怎么使用
后端开发2023-07-02
怎么在Java中使用ReentrantLock实现并发编程
后端开发2023-06-15
在java项目中使用线程池实现并发编程
后端开发2023-05-31
怎么在Java中使用CountDownLatch实现并发编程
后端开发2023-06-14
web开发中分布式、高并发、多线程是什么
后端开发2024-04-02
多线程并发编程如何在Java项目中实现
后端开发2023-05-31
Java多线程开发工具之CompletableFuture怎么应用
后端开发2023-07-05
怎么在JAVA中使用ReentrantLock实现并发
后端开发2023-06-15
咦!没有更多了?去看看其它编程学习网 内容吧