欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java多線程消息隊(duì)列的實(shí)現(xiàn)代碼

 更新時(shí)間:2017年07月24日 10:06:59   作者:Mr_linjw  
本篇文章主要介紹了java多線程消息隊(duì)列的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本文介紹了java多線程消息隊(duì)列的實(shí)現(xiàn)代碼,分享給大家,希望對(duì)大家有幫助,順便也自己留個(gè)筆記

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

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

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<offerMaxQueue&&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();
  }
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • eclipse報(bào)錯(cuò) eclipse啟動(dòng)報(bào)錯(cuò)解決方法

    eclipse報(bào)錯(cuò) eclipse啟動(dòng)報(bào)錯(cuò)解決方法

    本文將介紹eclipse啟動(dòng)報(bào)錯(cuò)解決方法,需要了解的朋友可以參考下
    2012-11-11
  • SpringCloud微服務(wù)應(yīng)用config配置中心詳解

    SpringCloud微服務(wù)應(yīng)用config配置中心詳解

    這篇文章主要介紹了SpringCloud微服務(wù)應(yīng)用-config配置中心,包括相關(guān)知識(shí)介紹、搭建、動(dòng)態(tài)刷新、測(cè)試,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • log4j與slf4j的使用與區(qū)別詳解

    log4j與slf4j的使用與區(qū)別詳解

    這篇文章主要介紹了log4j與slf4j的使用與區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java判斷class子類(lèi)或父類(lèi)的實(shí)例方法

    java判斷class子類(lèi)或父類(lèi)的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于java判斷class子類(lèi)或父類(lèi)的實(shí)例方法,需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02
  • Spring Security Remember me使用及原理詳解

    Spring Security Remember me使用及原理詳解

    這篇文章主要介紹了Spring Security Remember me使用及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java基于Lock的生產(chǎn)者消費(fèi)者模型示例

    Java基于Lock的生產(chǎn)者消費(fèi)者模型示例

    這篇文章主要介紹了Java基于Lock的生產(chǎn)者消費(fèi)者模型,結(jié)合實(shí)例形式分析了java基于鎖機(jī)制的生產(chǎn)者消費(fèi)者模型相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-08-08
  • SpringBoot快速搭建web項(xiàng)目詳細(xì)步驟總結(jié)

    SpringBoot快速搭建web項(xiàng)目詳細(xì)步驟總結(jié)

    這篇文章主要介紹了SpringBoot快速搭建web項(xiàng)目詳細(xì)步驟總結(jié) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 解決springboot啟動(dòng)Logback報(bào)錯(cuò)ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rena

    解決springboot啟動(dòng)Logback報(bào)錯(cuò)ERROR in ch.qos.logback.cla

    這篇文章主要介紹了解決springboot啟動(dòng)Logback報(bào)錯(cuò)ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rena問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Day16基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    Day16基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址代碼示例

    Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址代碼示例

    openFeign是作為微服務(wù)之間調(diào)用的解決方案,每個(gè)微服務(wù)項(xiàng)目是必不可少的,下面這篇文章主要給大家介紹了關(guān)于Spring?cloud?OpenFeign中動(dòng)態(tài)URl、動(dòng)態(tài)傳遞接口地址的相關(guān)資料,需要的朋友可以參考下
    2024-02-02

最新評(píng)論