生產者 消費者模式

2021-09-25 11:24:22 字數 1428 閱讀 8421

生產者和消費者問題是執行緒模型中的經典問題:生產者和消費者在同一時間段內共用同乙個儲存空間,生產者往儲存空間中新增產品,消費者從儲存空間中取走產品,當儲存空間為空時,消費者阻塞,當儲存空間滿時,生產者阻塞。

通過平衡生產者的生產能力和消費者的消費能力來提公升整個系統的執行效率,這是生產者消費者模型最重要的作用 。

/**

* 生產者消費者模型

* 通過wait、notify實現

* 緩衝區滿和為空時都呼叫wait()方法等待,當生產者生產了乙個產品或者消費者消費了乙個產品之後會喚醒所有執行緒。

*/public class producerconsumer1

//生產者-生產資料

class producer implements runnable catch (exception e)

}count++;//生產乙個資料

system.out.println(thread.currentthread().getname() + "生產者生產,目前總共有" + count);

lock.notifyall();//生產完畢,喚醒消費者

}try catch (interruptedexception e) }}

}//消費者-消費資料

class consumer implements runnable catch (exception e)

}count--;//消費乙個資料

system.out.println(thread.currentthread().getname() + "消費者消費,目前總共有" + count);

lock.notifyall();//消費完畢,喚醒生產者

}try catch (interruptedexception e) }}

}}

方式二:

/**

* 生產者消費者模型

* 通過blockqueue實現

* 當乙個執行緒對已經滿了的阻塞佇列進行入隊操作時會阻塞,

* 除非有另外乙個執行緒進行了出隊操作,當乙個執行緒對乙個空的阻塞佇列進行出隊操作時也會阻塞,除非有另外乙個執行緒進行了入隊操作。

*/public class producerconsumer

//生產者-生產資料

class producer implements runnable catch (interruptedexception e)

try catch (interruptedexception e) }}

}//消費者-消費資料

class consumer implements runnable catch (interruptedexception e)

try catch (interruptedexception e) }}

}}

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者 消費者模式

一 我哥們把資料存入redis快取區 生產者 二 我從緩衝器取資料,並作處理!消費者 詳細 如下 取訂單並判斷 redis new redis conn flag redis connect redis translate usefull host,redis translate usefull p...

生產者消費者模式

常見場景 某個模組負責產生資料,這些資料由另乙個模組來負責處理。產生資料的模組,就形象地稱為生產者 而處理資料的模組,就稱為消費者。該模式還需要有乙個緩衝區處於生產者和消費者之間,作為乙個中介。生產者把資料放入緩衝區,而消費者從緩衝區取出資料 緩衝區作用 1.解耦,生產者和消費者只依賴緩衝區,而不互...