zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第十四章-线程间通信-多生产者多消费者问题-JDK1.5解决办法

    一.

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

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

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

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

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

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

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

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

  • 相关阅读:
    poj 1840(五元三次方程组)
    Selenium(二)开发环境的搭建
    Selenium(一)自动化测试简介
    (二)AppScan使用教程
    (一)AppScan的安装及破解
    (一)python3.7的安装
    读完《大道至简》后的反思
    BZOJ3585: mex
    BZOJ3544: [ONTAK2010]Creative Accounting
    BZOJ3531: [Sdoi2014]旅行
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/8093308.html
Copyright © 2011-2022 走看看