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