黑马程序员技术交流社区

标题: Java社招编程题求教 [打印本页]

作者: Alcher    时间: 2016-12-11 15:39
标题: Java社招编程题求教
      假设有一个礼品箱里面有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份礼品
               
作者: 舜乡牛童    时间: 2016-12-12 00:37
有点难度

作者: Alcher    时间: 2016-12-12 14:06
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();
        }

}





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