JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法

一.

在1.5版本中,将原先的形式进行了改变,但是功能并没有任何变化,那么这么做的原因是什么?

以前,我们一个锁上只有一组监视器,这组监视器既监视着生产者,又监视着消费者。这组监视器能将生产者和消费者全都wait,也能将生产者和消费者全都唤醒。或者notify也行,它也能将其中一条线程唤醒,而其中一条不能确定是谁,有可能是本方,也可能是对方。

现在我们的线程进行了分类,一组负责生产,一组负责消费。我们希望生产者能够唤醒消费者,消费者唤醒生产者。如果搞两个监视器,一组监视生产者,一组监视消费者,这就靠谱了。

以前怎么弄的,生产者得具备一个锁,消费者得具备另一个锁,因为一个锁只能有一个监视器,现在一个锁上有多个监视器。现在我们四个线程用的是同一把锁,但是监视器不一样,是两个监视器,一个监视生产者,一个监视消费者。生产这边拿的是消费的唤醒,唤醒的就是消费的线程。

JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法

如果是两个锁,那么生产只能用于生产,消费只能用于消费(这是说的以前的做法),它俩可以同时运行,就会导致问题。

而我们现在生产里面在操作的时候,消费是不能动的,这叫同一个锁。

producer_con生产者监视器,consumer_con消费者监视器。

JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法

一个锁上挂着多个监视器。生产者监视器监视的是生产者,唤醒的是对方么

相关推荐