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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Alcher

初级黑马

  • 黑马币:24

  • 帖子:8

  • 精华:0

© Alcher 初级黑马   /  2016-12-11 15:39  /  1036 人查看  /  2 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

      假设有一个礼品箱里面有100份礼品,创建两条线程(分别设置线程名称:线程A和线程B)
               
                1)礼品箱有100份礼品,用int num = 100;表示(不用创建礼品箱类直接用int表示)
               
                2)每次取出礼品就用num—模拟
               
                3)每次补充礼品用num++模拟
               
                条件:
               
                1)当礼品箱中礼品的数量等于12份的时候, 线程运行完毕
               
                2)当礼品箱中礼品的数量等于12份的时候线程A不能再从礼品箱中取出礼品
               
                3)当礼品箱中礼品的数量等于12份的时候线程B也不能向礼品箱中添加礼品
               
                4)当线程A执行时要从礼品箱中取一份礼品,当线程B执行时要往礼品箱中补充一份礼品(如果礼品箱中是100份礼品则不用补充礼品)
               
                5)输出格式为:线程X从礼品箱中(取/添加)礼品,礼品箱还有X份礼品
               
                             线程A从礼品箱中取礼品,礼品箱还有99份礼品
               
                             线程B从礼品箱中添加礼品,礼品箱还有100份礼品
               
                             线程A从礼品箱中取礼品,礼品箱还有99份礼品
               
                             线程A从礼品箱中取礼品,礼品箱还有98份礼品
               

2 个回复

正序浏览
public class Test {

        static int num = 100;

        public static void main(String[] args) {

                // 取出
                new Thread("线程A") {
                        public void run() {
                                while (true) {
                                        synchronized ("W") {

                                                if (num > 12) {
                                                        num--;
                                                        System.out.println(Thread.currentThread().getName()
                                                                        + "从礼品箱中取礼品,礼品箱还有" + num + "份礼品");
                                                } else {
                                                        break;
                                                }
                                        }
                                }
                        };
                }.start();
                // 添加
                new Thread("线程B") {
                        public void run() {
                                while (true) {
                                        synchronized ("W") {
                                                if (num > 12 && num < 100) {
                                                        num++;
                                                        System.out.println(Thread.currentThread().getName()
                                                                        + "从礼品箱中添加礼品,礼品箱还有" + num + "份礼品");
                                                } else {
                                                        break;
                                                }
                                        }
                                }
                        };
                }.start();
        }

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