黑马程序员技术交流社区

标题: 多线程之卖包子 面试点招题 难度系数3.5 [打印本页]

作者: wolfking0608    时间: 2016-10-8 22:23
标题: 多线程之卖包子 面试点招题 难度系数3.5
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 + "个包子!!!");
        }

}
作者: 林健916    时间: 2016-10-8 23:13
666大神,膜拜下

作者: 荔荔舟    时间: 2016-10-9 00:03
比正常的多线程要难一些
作者: huangweicong    时间: 2016-10-9 00:09
谢谢!!!!!!!!!!!!!
作者: 李春林    时间: 2016-10-9 09:38
确定不包含5个包子吗?
作者: 李春林    时间: 2016-10-9 09:55
确定不包含5个包子吗?你运行过你写的编程吗?不符合题意不说,运行出来的结果还是错的
作者: 李春林    时间: 2016-10-9 10:00
我写出了正确的解法
http://bbs.itheima.com/thread-330216-1-1.html
作者: HackSon    时间: 2016-10-9 15:00
你的程序有问题,最后可能会出现负数的包子,比如:包子数剩下2个,而产生随机数为3,进入同步锁后判断包子数不小于0,继续走,baizi-=temp;做完运算后变量baizi就等于-1了,说白了就是只有两个包子,却卖出了三个包子,这是不合理的。
作者: 此间的少年    时间: 2016-10-9 16:27
可以,学习了

作者: barny    时间: 2016-10-9 17:11
让老衲搞一下
作者: barny    时间: 2016-10-9 18:41
哈哈哈哈哈哈哈哈哈
作者: zhuangshuang123    时间: 2016-10-9 18:59
楼主程序存在缺陷啊,要线程同步的

作者: Jarc    时间: 2016-10-9 20:14
  int num = r.nextInt(4) + 1这个是随机卖出几个吗
作者: 李春林    时间: 2016-10-10 09:04
HackSon 发表于 2016-10-9 15:00
你的程序有问题,最后可能会出现负数的包子,比如:包子数剩下2个,而产生随机数为3,进入同步锁后判断包子 ...

所以说他的程序是有问题的,他非不服,混分就混分呗,混得还那么理直气壮也是醉




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2