本文介绍了java多线程消息队列的实现代码,分享给大家,希望对大家有帮助,顺便也自己留个笔记

1、定义一个队列缓存池:
//static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。 private static List<Queue> queueCache = new LinkedList<Queue>();
2、定义队列缓冲池最大消息数,如果达到该值,那么队列检入将等待检出低于该值时继续进行。
private Integer offerMaxQueue = 2000;
3、定义检出线程,如果队列缓冲池没有消息,那么检出线程会线程等待中
new Thread(){
public void run(){
while(true){
String ip = null;
try {
synchronized (queueCache) {
Integer size = queueCache.size();
if(size==0){
//队列缓存池没有消息,等待。。。。 queueCache.wait();
}
Queue queue = queueCache.remove(0);
if(isIpLock(queueStr)){//假若这个是一个多应用的分布式系统,那么这个判断应该是分布式锁,这里说的锁不是线程停止,而是跳过该消息,滞后处理
queueCache.add(queue);该queue重新加入队列缓冲池,滞后处理,
continue;
}else{
;//这里是处理该消息的操作。
}
size = queueCache.size();
if(size<offerMaxQueue&&size>=0){ queueCache.notifyAll();//在队列缓存池不超过最大值的前提下,假若检入正在等待中,那么那么让他们排队检入。
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {//检出该消息队列的锁
unIpLock(queueStr);
} catch (Execption e) {//捕获异常,不能让线程挂掉
e.printStackTrace();
}
}
}
}.start();
4、检入队列
synchronized (queueCache) {
while(true){
Integer size = queueCache.size();
if(size>=offerMaxQueue){
try {
queueCache.wait();
continue;//继续执行等待中的检入任务。
} catch (InterruptedException e) {
e.printStackTrace();
}
}//IF
if(size<=offerMaxQueue&&size>0){
queueCache.notifyAll();
}
break;//检入完毕
}//while
}
5、锁方法实现
/**
* 锁
* @param ip
* @return
* @throws
*/
public Boolean isLock(String queueStr) {
return this.redisManager.setnx(queueStr+"_lock", "LOCK", 10000)!=1;
}
//解锁
public void unIpLock(String queueStr) {
if(ip!=null){
this.redisManager.del(queueStr+"_lock");
// lock.unlock();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java多线程消息队列
# Java消息队列
# Java进程间通信之消息队列
# Java消息队列JMS实现原理解析
# Java中消息队列任务的平滑关闭详解
# Java消息队列的简单实现代码
# Java利用Redis实现消息队列的示例代码
# Java自带消息队列Queue的使用教程详细讲解
# 是一个
# 能让
# 给大家
# 不超过
# 它不
# 跳过
# 多线程
# 大家多多
# 留个
# 解锁
# 应该是
# 也就是说
# 前提下
# 正在等待
# synchronized
# Thread
# public
# ip
# true
# String
相关文章:
长沙做网站要多少钱,长沙国安网络怎么样?
如何选择香港主机高效搭建外贸独立站?
如何用低价快速搭建高质量网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
家庭建站与云服务器建站,如何选择更优?
建站VPS选购需注意哪些关键参数?
如何在万网自助建站平台快速创建网站?
北京网站制作的公司有哪些,北京白云观官方网站?
海南网站制作公司有哪些,海口网是哪家的?
如何高效利用亚马逊云主机搭建企业网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
购物网站制作公司有哪些,哪个购物网站比较好?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
图册素材网站设计制作软件,图册的导出方式有几种?
,石家庄四十八中学官网?
青岛网站建设如何选择本地服务器?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
佛山企业网站制作公司有哪些,沟通100网上服务官网?
电商平台网站制作流程,电商网站如何制作?
建站主机类型有哪些?如何正确选型
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何在阿里云通过域名搭建网站?
如何用美橙互联一键搭建多站合一网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何做静态网页,sublimetext3.0制作静态网页?
如何自定义建站之星网站的导航菜单样式?
建站之星收费标准详解:套餐费用及年费价格表一览
如何在Tomcat中配置并部署网站项目?
西安专业网站制作公司有哪些,陕西省建行官方网站?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
网站按钮制作软件,如何实现网页中按钮的自动点击?
浅析上传头像示例及其注意事项
手机网站制作与建设方案,手机网站如何建设?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何打造高效商业网站?建站目的决定转化率
如何基于云服务器快速搭建网站及云盘系统?
如何通过智能用户系统一键生成高效建站方案?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
c# 在ASP.NET Core中管理和取消后台任务
如何选择高性价比服务器搭建个人网站?
小程序网站制作需要准备什么资料,如何制作小程序?
临沂网站制作公司有哪些,临沂第四中学官网?
建站之星2.7模板快速切换与批量管理功能操作指南
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何确保FTP站点访问权限与数据传输安全?
*请认真填写需求信息,我们会在24小时内与您取得联系。