w553186818 发表于 2020-7-17 07:45:19

多线程通信的问题

这种关于生产者和消费者的代码
//生产产品
    public synchronized void produceProduct() {
      try {
            Thread.sleep(1000);
      } catch (InterruptedException e) {
            e.printStackTrace();
      }
      if(productCount < 20){
            productCount++;
            System.out.println(Thread.currentThread().getName() + ":开始生产第" + productCount + "个产品");
            notify();

      }else{
            //等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
      }

    }
    //消费产品
    public synchronized void consumeProduct() {
      try {
            Thread.sleep(1000);
      } catch (InterruptedException e) {
            e.printStackTrace();
      }
      if(productCount > 0){
            System.out.println(Thread.currentThread().getName() + ":开始消费第" + productCount + "个产品");
            productCount--;
            notify();
      }else{
            //等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
      }

    }
消费者和生产者的run()里调用的是这两段代码,我把sleep()放进同步里,执行好几遍,结果都是生产者要生产够20个,消费者才开始消费。但是如果把sleep()放在run()里,那就是有一定的交替。
不太明白,一开始消费者肯定是wait,但生产者生产出一个产品后,就把消费者唤醒了啊,以后按道理消费者是有可能在生产者没wait前,拿到cpu执行权的啊

徐颖科 发表于 2020-7-18 11:24:02

给完整代码?
页: [1]
查看完整版本: 多线程通信的问题