#!/usr/bin/envpython#-*-coding:utf-8-*-importthreading,random,timeVALUE=1000Lock=threading.Lock()classProduct(threading.Thread):defrun(self):全局VALUEwhileTrue:m=random.randint(100,500)Lock.acquire()VALUE+=mprint('%s生成了一个数字%s,现在数字的大小是%s'%(threading.current_thread(),m,VALUE))Lock.release()time.sleep(0.5)classConsumer(threading.Thread):defrun(self):globalVALUEwhileTrue:m=random.randint(200,600)Lock.acquire()如果值>=m:VALUE-=mprint('%s消耗了%s个数,现在这个数是%s'%(threading.current_thread(),m,VALUE))else:print('%s个数太多了small'%VALUE)Lock.release()time.sleep(0.5)defmain():forxinrange(3):t=Consumer(name='consumerthread%d'%(x))t.start()对于x在范围(5)中:t=Product(name='生产者线程%d'%(x))t.start()if__name__=='__main__':main()
