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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© crossover 中级黑马   /  2016-9-6 12:50  /  747 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {
        /*
         * 一辆公交车70个座位,只能从前后门下车,多线程模拟这个过程,
         * 并且输出剩下剩余的座位数。
         * */
        public static void main(String[] args) {
                MyThread mt1 = new MyThread();
                mt1.setName("前门");
                mt1.start();
                MyThread mt2 = new MyThread();
                mt2.setName("后门");
                mt2.start();
               
        }
}

class MyThread extends Thread{
        static int seat = 30;
        @Override
        public void run() {
                while(true){
                        synchronized(MyThread.class){
                               
                                if(seat == 70 && this.getName().equals("后门")){
                                        try {
                                                this.wait();
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                }
                                if(seat == 0 && this.getName().equals("前门")){
                                        try {
                                                this.wait();
                                        } catch (InterruptedException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                }
                               
                                if(this.getName().equals("前门")){
                                        seat++;
                                        System.out.println("上车一个,还剩"+(70-seat)+"个座位");
                                       
                                }else if(this.getName().equals("后门")){
                                        seat--;
                                        System.out.println("下车一个,还剩"+(70-seat)+"个座位");
                                }
                                notify();
                        }
                }
        }
}
求大神告诉为什么会有异常

2 个回复

倒序浏览
public class Test {
/*
* * 一辆公交车70个座位,只能从前后门下车,多线程模拟这个过程,
         * 并且输出剩下剩余的座位数。
*/
        public static void main(String[] args) {
                new Bus("前门").start();
                new Bus("后门").start();
        }
}

class Bus extends Thread {
        //定义静态共享变量
        private static int seats = 1;
        //继承Thread有参构造,给线程命名
        public Bus(String name) {
                super(name);
        }

        public void run() {
                while (true) {
                        //锁对象Bus.class
                        synchronized (Bus.class) {
                                //判断人全下后结束线程
                                if (seats > 70) {
                                        break;
                                }
                                //睡眠只是为了测试程序,可以注释掉
                                try {
                                        Thread.sleep(100);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                               
                                //假设车上70个座位都坐满了
                                System.out.println(getName() + "下车, 剩余" + seats + "座位");
                                seats++;
                        }
                }
        }
}
回复 使用道具 举报
你程序的错误我不会更改,我只是按照要求帮你写了一个正确的程序
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马