生产者消费者模型的学习
Created by Jerry Wang, last modified on Nov 12, 2014
PRODUCER: PROD2 is running
Thread: CONSUMER2 Consumer thread is running…
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 0 - consumer2 試圖從queue讀取
PRODUCER: PROD3 is running
PRODUCER: PROD1 is running
Thread: CONSUMER1 Consumer thread is running…
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 0 - consumer1試圖從queue讀取
Thread: PROD2 procedued data into queue: data:1 … - producer1生產(chǎn)了1個(gè)數(shù)據(jù)
PRODUCER: PROD2 is running
Thread: CONSUMER2 has consumed one data from queue: data:1 Queue sise: 0 - consumer2 消費(fèi)了1個(gè)數(shù)據(jù),消費(fèi)之后queue 空了
Thread: PROD1 procedued data into queue: data:2 … - thread 1生產(chǎn)了第二個(gè)數(shù)據(jù)
PRODUCER: PROD1 is running
Thread: CONSUMER1 has consumed one data from queue: data:2 Queue sise: 0 - consumer1將第二個(gè)數(shù)據(jù)消費(fèi)掉了
Thread: PROD3 procedued data into queue: data:3 … - producer生產(chǎn)了第三個(gè)數(shù)據(jù)
PRODUCER: PROD3 is running
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 1
Thread: CONSUMER2 has consumed one data from queue: data:3 Queue sise: 0 - consumer消費(fèi)了第三個(gè)數(shù)據(jù)
Thread: PROD2 procedued data into queue: data:4 … - producer生產(chǎn)了第四個(gè)數(shù)據(jù):4
PRODUCER: PROD2 is running
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 1
Thread: PROD1 procedued data into queue: data:5 … - producer生產(chǎn)了第5個(gè)數(shù)據(jù):5
PRODUCER: PROD1 is running
Thread: PROD3 procedued data into queue: data:6 … - producer生產(chǎn)了第六個(gè)數(shù)據(jù):6
PRODUCER: PROD3 is running
Thread: CONSUMER1 has consumed one data from queue: data:4 Queue sise: 1 - consumer1消費(fèi)了4,queue里還剩5,6.
此時(shí)consumer1只能看見(jiàn)一個(gè)元素
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 2 - consumer2能看見(jiàn)2個(gè)元素5,6
Thread: PROD2 procedued data into queue: data:7 … 7生產(chǎn)后,queue里3個(gè)元素5,6,7
Thread: PROD2 quit from producer thread
Thread: CONSUMER2 has consumed one data from queue: data:5 Queue sise: 2 -5被消費(fèi)后,還剩6,7
Thread: PROD1 procedued data into queue: data:8 … - queue里有6,7,8
Thread: PROD1 quit from producer thread
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 2
Thread: CONSUMER1 has consumed one data from queue: data:6 Queue sise: 2 - 6被消費(fèi)后,還剩7,8
Thread: PROD3 procedued data into queue: data:9 … - 9被生產(chǎn),queue里7,8,9
Thread: PROD3 quit from producer thread
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 3
Thread: CONSUMER2 has consumed one data from queue: data:7 Queue sise: 2 - queue里還剩8,9
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 2
Thread: CONSUMER1 has consumed one data from queue: data:8 Queue sise: 1 -queue里還剩9
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 1
Thread: CONSUMER2 has consumed one data from queue: data:9 Queue sise: 0 - queue全部消費(fèi)完,此時(shí)也沒(méi)有生產(chǎn)者在運(yùn)行
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 0
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 0
Thread: CONSUMER1 Consumer read queue timeout - 超時(shí)退出
Thread: CONSUMER1 consumer thread ends
Thread: CONSUMER2 Consumer read queue timeout - 超時(shí)退出
Thread: CONSUMER2 consumer thread ends
如果把consumer的read operation超時(shí)間隔改小,比如變成2毫秒,
則消費(fèi)者等不及生產(chǎn)者往queue里放數(shù)據(jù)后就讀超時(shí)退出了:
如果把生產(chǎn)者的生產(chǎn)數(shù)據(jù)的時(shí)間間隔改小,而scenario變?yōu)樯a(chǎn)者將所有的數(shù)據(jù)預(yù)先生產(chǎn)完畢,然后消費(fèi)者逐一消費(fèi)。
git path: https://github.com/i042416/consumer_producer.git
總結(jié)
以上是生活随笔為你收集整理的生产者消费者模型的学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Maven resource artif
- 下一篇: javaioIOException -