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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

复习了下多线程,看到一道很简单的题: * 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;
				}
			}
		}
	}
}

1 个回复

倒序浏览
线程一进来,拿到锁 o , 开始 while(true){. 100--完毕,线程结束.   线程二呢...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马