A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.Random;

/*3. 某包子店铺生意火爆,现开5个窗口模拟售卖100个包子,每次每个窗口随机卖出1-5个包子,
卖完最后一个包子后提示”包子已售完”(必须全部卖出),程序结束.(要求使用Thread类和Runnable两种方式去实现)
* */
public class Demo01 {
        public static void main(String[] args) {
                Bao b = new Bao();
                Thread t1 = new Thread(b);
                Thread t2 = new Thread(b);
                Thread t3 = new Thread(b);
                Thread t4 = new Thread(b);
                t1.setName("张三");
                t2.setName("李四");
                t3.setName("王五");
                t4.setName("赵六");
                t1.start();
                t2.start();
                t3.start();
                t4.start();
               
        }
}

class Bao implements Runnable {
        private static int baozi = 100;
        Random r = new Random();

        @Override
        public void run() {
                int sum = 0;
                while (true) {
                        int num = r.nextInt(4) + 1;

                        synchronized (this) {
                                if (baozi <= 0) {
                                        break;
                                }
                                try {
                                        Thread.sleep(100);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                System.out.println(Thread.currentThread().getName() + "卖了," + num + "个包子");
                                baozi = baozi - num;
                                sum = sum + num;
                        }
                }
               
                System.out.println("包子卖完了,"+Thread.currentThread().getName() + " 共卖了" + sum + "个包子!!!");
        }

}

评分

参与人数 1黑马币 +2 收起 理由
荔荔舟 + 2

查看全部评分

13 个回复

倒序浏览
回复 使用道具 举报
比正常的多线程要难一些
回复 使用道具 举报
谢谢!!!!!!!!!!!!!
回复 使用道具 举报
确定不包含5个包子吗?
回复 使用道具 举报
确定不包含5个包子吗?你运行过你写的编程吗?不符合题意不说,运行出来的结果还是错的
回复 使用道具 举报
我写出了正确的解法
http://bbs.itheima.com/thread-330216-1-1.html
回复 使用道具 举报
你的程序有问题,最后可能会出现负数的包子,比如:包子数剩下2个,而产生随机数为3,进入同步锁后判断包子数不小于0,继续走,baizi-=temp;做完运算后变量baizi就等于-1了,说白了就是只有两个包子,却卖出了三个包子,这是不合理的。
回复 使用道具 举报
可以,学习了
回复 使用道具 举报
barny 中级黑马 2016-10-9 17:11:20
10#
让老衲搞一下
回复 使用道具 举报
barny 中级黑马 2016-10-9 18:41:06
11#
哈哈哈哈哈哈哈哈哈
回复 使用道具 举报
楼主程序存在缺陷啊,要线程同步的
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
Jarc 高级黑马 2016-10-9 20:14:29
13#
  int num = r.nextInt(4) + 1这个是随机卖出几个吗
回复 使用道具 举报
HackSon 发表于 2016-10-9 15:00
你的程序有问题,最后可能会出现负数的包子,比如:包子数剩下2个,而产生随机数为3,进入同步锁后判断包子 ...

所以说他的程序是有问题的,他非不服,混分就混分呗,混得还那么理直气壮也是醉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马