生產者的執行緒專門用來生產一些資料,存放到乙個中間變數中。消費者再從這個中間的變數中取出資料進行消費。但是因為要使用中間變數,中間變數通常是一些全域性變數,因此需要使用鎖來保證資料完整性。
importrandom
import
threading
gmoney = 1000gtimes =0
galltimes = 10glock =threading.lock()
class
producer(threading.thread):
defrun(self):
global
gmoney
global
gtimes
while
true:
money = random.randint(100,1000) #
隨機生成100-1000的數字
glock.acquire()
if gtimes >= galltimes: #
限制生產者只能生產10次
glock.release() #
滿足條件,釋放鎖
break
gmoney +=money
gtimes += 1 #
生產次數+1
glock.release()
print('
生產者生產了元錢,剩餘元錢
'.format(threading.current_thread(),money,gmoney))
class
consumer(threading.thread):
defrun(self):
global
gmoney
while
true:
money = random.randint(100,1000)
glock.acquire()
if gmoney >= money: #
當剩餘錢大於隨機生成的錢
gmoney -=money
print('
消費了元錢,剩餘元錢
'.format(threading.current_thread(), money, gmoney))
else
:
if gtimes >=galltimes:
glock.release()
break
print('
消費了元錢,剩餘元錢,錢不足!
'.format(threading.current_thread(),money,gmoney))
glock.release()
defmain():
for i in range(3):
t2 =consumer()
t2.start()
for i in range(4):
t1 =producer()
t1.start()
if__name__ == '
__main__':
main()
生產者消費者問題 lock
public class public static void main string args class producer public void produce final intval start class consumer public void consume final intval...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
生產者和消費者模式
一 建立個生產者類 package consumerandproducer author tanhw119214 version jdk1.8.0 171 date on 2018 8 2 16 57 public class producer implements runnable public ...