JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法
一.
在1.5版本中,将原先的形式进行了改变,但是功能并没有任何变化,那么这么做的原因是什么?
以前,我们一个锁上只有一组监视器,这组监视器既监视着生产者,又监视着消费者。这组监视器能将生产者和消费者全都wait,也能将生产者和消费者全都唤醒。或者notify也行,它也能将其中一条线程唤醒,而其中一条不能确定是谁,有可能是本方,也可能是对方。
现在我们的线程进行了分类,一组负责生产,一组负责消费。我们希望生产者能够唤醒消费者,消费者唤醒生产者。如果搞两个监视器,一组监视生产者,一组监视消费者,这就靠谱了。
以前怎么弄的,生产者得具备一个锁,消费者得具备另一个锁,因为一个锁只能有一个监视器,现在一个锁上有多个监视器。现在我们四个线程用的是同一把锁,但是监视器不一样,是两个监视器,一个监视生产者,一个监视消费者。生产这边拿的是消费的唤醒,唤醒的就是消费的线程。
如果是两个锁,那么生产只能用于生产,消费只能用于消费(这是说的以前的做法),它俩可以同时运行,就会导致问题。
而我们现在生产里面在操作的时候,消费是不能动的,这叫同一个锁。
producer_con生产者监视器,consumer_con消费者监视器。
一个锁上挂着多个监视器。生产者监视器监视的是生产者,唤醒的是对方么?
相关推荐
ahnuzfm 2019-11-12
insularisland 2019-11-05
cxj 2015-03-16
RocNg 2018-05-30
joyjoy0 2017-03-22
pythoning 2015-04-02
wanzyao 2019-04-16
pythoncream 2018-10-15
kernzhang 2014-05-05
心理学哲学批判性思维 2018-01-27
BitTigerio 2018-01-21
迷思 2018-01-13
李叫兽 2017-12-24
读点儿设计 2017-12-19
李叫兽 2017-11-19