日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java多线程消息队列_java多线程消息队列的实现

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程消息队列_java多线程消息队列的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、定義一個隊列緩存池:

private static List queueCache = new LinkedList();

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=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();

}

}

已有 0 人發表留言,猛擊->> 這里<

ITeye推薦

總結

以上是生活随笔為你收集整理的java多线程消息队列_java多线程消息队列的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。