delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用
DelayQueue怎么在Java多线程并发开发中使用
发布时间:2020-12-05 17:29:31
来源:亿速云
阅读:56
作者:Leah
这篇文章给大家介绍DelayQueue怎么在Java多线程并发开发中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
Delayed,一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。此接口的实现必须定义一个 compareTo 方法,该方法提供与此接口的 getDelay 方法一致的排序。
在网上看到了一些示例,发现有的示例存在一些问题,做了些修改,希望能帮助大家理解。
中国人都喜欢K歌,大部分人的内心都住着一个歌手的梦,尤其是学生时代,大家都喜欢组团去KTV唱歌,一唱一下午,大家都唱得很爽。话说又到了一年一度的双11,许多的单身狗开始组团来到KTV唱歌。那么KTV这个时候如何通过程序来收费记时的呢,模拟的代码如下:
public class KTV implements Runnable{
private DelayQueue 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);
}
}
运行的结果如下:
KTV正常营业
================================
张三 等人交了500元钱,进入111号包厢,开始K歌...
李四 等人交了200元钱,进入666号包厢,开始K歌...
王五 等人交了100元钱,进入888号包厢,开始K歌...
================================
李四 等人所在的666号包厢,时间到...
王五 等人所在的888号包厢,时间到...
张三 等人所在的111号包厢,时间到...
关于DelayQueue怎么在Java多线程并发开发中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用相关推荐
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(十五)——JSP基础语法 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语
javaweb学习总结(十五)--JSP基础语法 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. ...
- java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等...
1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Time ...
- java内存栅栏_内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术
我们经常都听到并发编程,但很多人都被其高大上的感觉迷惑而停留在知道听说这一层面,下面我们就来讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见 ...
- java语言使用的字符码集是_Java应用开发中的字符集与字符编码
事出有因 在向HttpURLConnection的输出流写入内容时,因没有设置charset,导致接收方对数据的验签不一致. URL url = newURL(requestUrl);//打开连接 H ...
- java 模拟多线程并发_Java中模拟同时并发请求
有时需要测试一下某个功能的并发性能,又不要想借助于其他工具,索性就自己的开发语言,来一个并发请求就最方便了. java中模拟并发请求,自然是很方便的,只要多开几个线程,发起请求就好了.但是,这种请求, ...
- java线程池拒绝策略_Java核心知识 多线程并发 线程池原理(二十三)
线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后 启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕, 再从队列中取出任务来执行.他 ...
- java sqlite 多线程并发_Android中Sqlite数据库多线程并发问题
最近在做一个Android项目, 为了改善用户体验,把原先必须让用户"等待"的过程改成在新线程中异步执行.但是这样做遇到了多个线程同时需要写Sqlite数据库,导致操作数据库失败. ...
- JAVA社交平台项目第七天 JUC多线程
JUC多线程 (一) 学习目标: 掌握多线程的创建 掌握线程安全的处理 了解线程状态 掌握线程停止的两种方法 了解线程的原子性,可见性和有序性 理解内存可见性的原理 掌握synchronized解决内 ...
- Java 中有三大支柱
在 Java 中除了最为基础的东西之外,你只要看三样东西就可以了: Java 中有三大支柱,在 java.util.concurrent.java.security.javax.cropty.java ...
最新文章
- perl 登录linux服务器,用Perl管理Linux操作系统的配置文件
- Tungsten Fabric SDN — DCI
- linux shell 脚本练习,shell脚本小练习
- 金融系列4《基本指令》
- python对XML的解析
- Spring MVC测试框架入门–第2部分
- 搭建LNMP遇到的问题
- RabbitMQ消息队列简单异步邮件发送和订单异步处理实战【应用解耦】【异步削峰】
- 一起学习C语言:初步进入编程世界(二)
- html 静态网页如何在手机上访问,anywhere,http-server
- 关于win10 pagefile.sys文件的解读及占用C盘空间太大的处理
- 四,AXI总线协议解析
- 关于DDoS攻击的8个误区
- 南京南汽技工学校计算机专业是啥,计算机中心附近技术类学校
- 计算机打字键盘怎么控制,键盘不受控制怎么办?
- pands 画图 调整大小_关于数学建模的画图学习建议
- python代码图片头像_python图像处理-个性化头像
- 规划xr871实现儿童故事机的基本功能
- Vue中定制公共组件之modal
- 开机报错“部分便笺的元数据已被损坏” 解决方法 win7