使用場景:
遊戲中多個玩家生產任務,伺服器多執行緒處理任務, netty工作執行緒收到客戶端傳來資料,生成任務後,加入到任務佇列中;
public abstract class basetask
任務管理器
public class mutitaskmanager
private final static mutitaskmanager instance = new mutitaskmanager();
public static mutitaskmanager getinstance()
//執行緒池
private executorservice executor = null;
//任務佇列
private volatile queuetaskqueue = new linkedlist();
//執行緒物件列表
private listtaskexecutors;
//執行緒數量
private int threadnum;
private volatile object signal = new object();
/*** 初始化執行緒列表
* @param threadcnt
*/public void init(int threadcnt) }
/*** 新增任務
* @param task
*/public void addtask(basetask task) }
/*** 取出任務
* @return
*/public basetask poptask()
public int gettasksize()
/*** 開啟服務,啟動執行緒池
*/public void startservice() }
public void stopservice() throws exception
this.executor.shutdown();
}}
消費者
/**
* 任務執行者
* @author skymr
* */
public class mutitaskexecutor implements runnable
@override
public void run() catch (interruptedexception e)
task = mutitaskmanager.getinstance().poptask();}}
if (task != null) catch(exception e)
}} }
public void stopwork()
}
訊息者的任務是乙個無限迴圈中,判斷是否有新任務加入,如果有,執行任務,消費;如果沒有則進入等待(signal.wait()),直到接收到任務通知。
單生產者 多消費者模型
問題出處 生產者消費者問題 有乙個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不...
python queue 多生產者,多消費者
專案需求是從快 爬取ip,運用到專案中,設定佇列的大小,當有ip被消耗時,就新增新的ip到佇列中,獲取ip的頁面是不斷重新整理的。總的來說,就是一方不斷把爬取ip存到佇列中,一方不斷從佇列中取ip,消耗ip,此處爬取的是快 首先建立乙個佇列 from queue import queue q que...
生產者消費者模型二(單 多模型)
生產者 消費者問題 producer consumer 又名 有界緩衝區 bounded buffer 問題 單生產者 多消費者 設計要點 當緩衝區滿已滿,而此時生產者還想向緩衝區中放入乙個新的資料項時。則讓生產者睡眠,待消費者從緩衝區中取出乙個或多個資料項時再喚醒生產者。同樣的,當緩衝區滿已空,而...