线程抢占CPU问题

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个座位

  求大佬帮忙!!!!!!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值