黑马程序员技术交流社区

标题: 请教大家一个初级问题:多线程停车场 [打印本页]

作者: 给V过一天V    时间: 2017-6-9 15:29
标题: 请教大家一个初级问题:多线程停车场
复习了下多线程,看到一道很简单的题: * 2、某停车场共100个车位,编号:1-100;
开启两个线程模拟两个入口,每个入口一次驶入一辆车需要耗时100ms;
  每驶入一辆车控制台打印出停靠的车位号,直到停车场停满车辆为止

然后我用同步锁的方式实现了,代码如下,但是运行后,只有第一个线程在运行,第二个死活跑不起来,大家帮忙看看,谢谢


[Java] 纯文本查看 复制代码


public class Test2 {
public static void main(String[] args) {
         P p_tingchce = new P();//创建对象
         //开启两个线程模拟两个入口
         new Thread(p_tingchce,"第一个入口").start();
         new Thread(p_tingchce,"第二个入口").start();
}
}
class P implements Runnable{
        int p_st=100;
        //设定100个停车位
        Object o=new  Object();//定义一个对象 用于同步代码块的锁
        @Override
        public void run() {
//同步锁
                synchronized (o) {
                        while(true){
                                if (p_st>0) {
                                        //打印车位号
                                        System.out.println(Thread.currentThread().getName()+"  "+p_st--);
                                        try {
                                                Thread.sleep(100);
                                                //模拟耗时100毫秒
                                        } catch (InterruptedException e) {
                                        }
                                }else {
                                        //停满后终止
                                        break;
                                }
                        }
                }
        }
}

作者: as2991    时间: 2017-6-25 21:30
线程一进来,拿到锁 o , 开始 while(true){. 100--完毕,线程结束.   线程二呢...




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