全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java多线程消息队列的实现代码

本文介绍了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小时内与您取得联系。