public class Work0805 {
public static void main(String[] args) {
Door d = new Door();
Thread t1 = new Thread(d, "中门");
Thread t2 = new Thread(d, "前门");
Thread t3 = new Thread(d, "后门");
t1.start();
t2.start();
t3.start();
}
}
class Door implements Runnable {
private int people = 0;
public void run() {
// synchronized ("a") {
while (true) {
synchronized (this) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (people >= 80) {
break;
}
people++;
System.out.println(
"第" + people + "人从" + Thread.currentThread().getName() + "上车,剩余" + (80 - people) + "个座位");
}
}
}
}
如图,我把sleep放到了锁里面,然后每一次都会有一个线程去抢占CPU。每一次解开锁之后,三个线程抢占CPU的几率是相同 的。但是执行结果差强人意!如下!
//运行结果太多,所以截取一部分!
第1人从中门上车,剩余79个座位
第2人从中门上车,剩余78个座位
第3人从中门上车,剩余77个座位
第4人从中门上车,剩余76个座位
第5人从中门上车,剩余75个座位
第6人从中门上车,剩余74个座位
第7人从中门上车,剩余73个座位
第8人从中门上车,剩余72个座位
第9人从中门上车,剩余71个座位
第10人从中门上车,剩余70个座位
第11人从中门上车,剩余69个座位
第12人从中门上车,剩余68个座位
第13人从前门上车,剩余67个座位
第14人从前门上车,剩余66个座位
求大佬帮忙!!!!!!!!