鱼C论坛

 找回密码
 立即注册
查看: 1932|回复: 1

多线程通信的问题

[复制链接]
发表于 2020-7-17 07:45:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  12.         }else{
  13.             //等待
  14.             try {
  15.                 wait();
  16.             } catch (InterruptedException e) {
  17.                 e.printStackTrace();
  18.             }
  19.         }

  20.     }
  21.     //消费产品
  22.     public synchronized void consumeProduct() {
  23.         try {
  24.             Thread.sleep(1000);
  25.         } catch (InterruptedException e) {
  26.             e.printStackTrace();
  27.         }
  28.         if(productCount > 0){
  29.             System.out.println(Thread.currentThread().getName() + ":开始消费第" + productCount + "个产品");
  30.             productCount--;
  31.             notify();
  32.         }else{
  33.             //等待
  34.             try {
  35.                 wait();
  36.             } catch (InterruptedException e) {
  37.                 e.printStackTrace();
  38.             }
  39.         }

  40.     }
复制代码

消费者和生产者的run()里调用的是这两段代码,我把sleep()放进同步里,执行好几遍,结果都是生产者要生产够20个,消费者才开始消费。但是如果把sleep()放在run()里,那就是有一定的交替。
不太明白,一开始消费者肯定是wait,但生产者生产出一个产品后,就把消费者唤醒了啊,以后按道理消费者是有可能在生产者没wait前,拿到cpu执行权的啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-18 11:24:02 | 显示全部楼层
给完整代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表