執行緒(六) 生產者消費者模式

2021-09-11 04:26:18 字數 1608 閱讀 7628

為什麼要使用生產者消費者模式

什麼是生產者消費者模式

生產者消費模式是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費這彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從阻塞佇列就相當於乙個緩衝區,為了生產者和消費者的處理能力。

這就像,在餐廳,廚師就做好菜,不需要直接和客戶交流,而是交給前台,而客戶去飯菜也不需要不找廚師,直接去前台零取即可,這也是乙個解耦過程。

使用佇列訊息通知函式:

task_done()通知佇列裡已經存在的資料
join()佇列至為空時,等待
舉例:生產消費包子

import  time,random

import queue,threading

q = queue.queue()

def producer(name):

count = 0

while count <10:

print("******.....")

time.sleep(random.randrange(3))

q.put(count)

print("producer %s has produced %s baozi"%(name,count))

count +=1

# q.task_done() #告訴消費者生產好了

q.join()#等待訊息

print("ok....")

time.sleep(1)

pass

def consumer(name):

count = 0

while count <10:

time.sleep(random.randrange(4))

#print("%s waiting ..."%name)

#q.join()#等待訊息

data = q.get()

time.sleep(4)

print("consumer %s has eat %s baozi "%(name,count))

q.task_done()#告訴生產者消費好了

執行緒5 生產者消費者模式(執行緒通訊)

package com.thread.test 1 生產者生產出產品,給商店 緩衝區 2 商店把產品提供給消費者 1 需要三個角色,生產者,商店,消費者 2 涉及到多執行緒 3 涉及到執行緒安全 4 執行緒間通訊 class producer implements runnable override...

多執行緒通訊(二)生產者 消費者模式

生產者 消費者模式其原理是基於wait notify實現的。通過 更能便於理解,廢話不多說,上 生成者和消費者一對一模式 生產者public class producer public void buildproduct 生產產品並通知消費者 thread.sleep 1000 system.out...

5 12 生產者和消費者

一 生產者和消費者之間的關係 1 生產者將生產出來的資訊不斷存入乙個區域內,消費者將資訊從該區域內不斷讀取出來 生產者錄入資訊 消費者讀取資訊 例 電影票 public class movie public void setname string name public string getinfo...