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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有100个限量版的包包,但是只能通过实体店和官网才能进行购买,并且分别统计卖出多少。请用线程进行模拟并设置线程名称,用来代表售出途径,再将信息打印出来
比如(实体店卖出第1个包包总共还剩余n个包包)

2 个回复

倒序浏览
{:3_57:}好厉害的样子
回复 使用道具 举报
其实这道题主要的考点是在多线程的同步这一块,弄懂这一点就海阔天空了,这是这个题目的解法,希望能帮到你{: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) + " 个包包");
                        }
                }

        }

}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马