真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中的消息隊(duì)列怎么利用多線程實(shí)現(xiàn)

java中的消息隊(duì)列怎么利用多線程實(shí)現(xiàn)?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了南京免費(fèi)建站歡迎大家使用!

1、定義一個(gè)隊(duì)列緩存池:

 //static修飾的成員變量和成員方法獨(dú)立于該類的任何對(duì)象。也就是說(shuō),它不依賴類特定的實(shí)例,被類的所有實(shí)例共享。
private static List queueCache = new LinkedList();

2、定義隊(duì)列緩沖池最大消息數(shù),如果達(dá)到該值,那么隊(duì)列檢入將等待檢出低于該值時(shí)繼續(xù)進(jìn)行。

private Integer offerMaxQueue = 2000;

3、定義檢出線程,如果隊(duì)列緩沖池沒(méi)有消息,那么檢出線程會(huì)線程等待中

new Thread(){
    public void run(){
     while(true){
      String ip = null;
      try {
       synchronized (queueCache) {
        Integer size = queueCache.size();
        if(size==0){
//隊(duì)列緩存池沒(méi)有消息,等待。。。。     queueCache.wait();
        }
        Queue queue = queueCache.remove(0);

        if(isIpLock(queueStr)){//假若這個(gè)是一個(gè)多應(yīng)用的分布式系統(tǒng),那么這個(gè)判斷應(yīng)該是分布式鎖,這里說(shuō)的鎖不是線程停止,而是跳過(guò)該消息,滯后處理
         queueCache.add(queue);該queue重新加入隊(duì)列緩沖池,滯后處理,
         continue;
        }else{
      ;//這里是處理該消息的操作。
        }
        size = queueCache.size();
        if(size=0){     queueCache.notifyAll();//在隊(duì)列緩存池不超過(guò)最大值的前提下,假若檢入正在等待中,那么那么讓他們排隊(duì)檢入。
        }
       }
      } catch (Exception e) {
       e.printStackTrace();
      }finally{
       try {//檢出該消息隊(duì)列的鎖
        unIpLock(queueStr);
       } catch (Execption e) {//捕獲異常,不能讓線程掛掉
        e.printStackTrace();
       } 
                      }
      }
   }.start();

4、檢入隊(duì)列

synchronized (queueCache) {
while(true){
Integer size = queueCache.size();
if(size>=offerMaxQueue){
      try {
       queueCache.wait();
continue;//繼續(xù)執(zhí)行等待中的檢入任務(wù)。
 } catch (InterruptedException e) {
   e.printStackTrace();
 }
 }//IF

if(size<=offerMaxQueue&&size>0){
 queueCache.notifyAll();
}
break;//檢入完畢
}//while
}

5、鎖方法實(shí)現(xiàn)

/**
  * 鎖
  * @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();
  }
 }

看完上述內(nèi)容,你們掌握java中的消息隊(duì)列怎么利用多線程實(shí)現(xiàn)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


本文題目:java中的消息隊(duì)列怎么利用多線程實(shí)現(xiàn)
文章網(wǎng)址:http://weahome.cn/article/iipidj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部