黑马程序员技术交流社区

标题: 多线程问题,如何实现分别卖出了多少啊 [打印本页]

作者: wuhsuai    时间: 2016-9-19 20:50
标题: 多线程问题,如何实现分别卖出了多少啊
有100个限量版的包包,但是只能通过实体店和官网才能进行购买,并且分别统计卖出多少。请用线程进行模拟并设置线程名称,用来代表售出途径,再将信息打印出来
比如(实体店卖出第1个包包总共还剩余n个包包)

作者: 边_城    时间: 2016-9-19 21:19
{:3_57:}好厉害的样子
作者: LShu    时间: 2016-9-19 21:48
其实这道题主要的考点是在多线程的同步这一块,弄懂这一点就海阔天空了,这是这个题目的解法,希望能帮到你{:3_53:}
public class Test {


        /**
         *  有100个限量版的包包,但是只能通过实体店和官网才能进行购买,并且分别统计卖了多少。
         * 请用线程进行模拟并设置线程名称用来代表售出途径,再将信息打印出来。 比如(实体店卖出第1个包包,总共剩余n个包包)
         */
        public static void main(String[] args) {
                //创建包包对象
                Bag bag = new Bag();
                //将包包对象作为参数传递给Thread构造,给每个线程起一个名字。并启动线程
                new Thread(bag, "实体店").start();
                new Thread(bag, "官网").start();
        }
}

//包包类   实现Runnable接口
class Bag implements Runnable {
        //定义包包的数量
        private int num = 100;
        //重写run方法
        @Override
        public void run() {
                while (true) {
                        //加上同步
                        synchronized (this) {
                                //如果包包数量小于等于0,则停止售卖
                                if (num <= 0)
                                        break;
                                try {
                                        //为了看到效果,休眠10毫秒
                                        Thread.sleep(10);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                                //获取线程的名称,并打印卖出的和剩余的包包数量
                                System.out.println(Thread.currentThread().getName() + "卖出第"
                                                + (100 - num + 1) + "个包包,总共剩余 " + (--num) + " 个包包");
                        }
                }

        }

}






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