题目:
某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//.....
从后门入场的员工总共: 13 位员工
从前门入场的员工总共: 87 位员工
测试类:
public class Demo {
public static void main(String[] args) {
People p = new People();
Thread t1 = new Thread(p, "前门");
Thread t2 = new Thread(p, "后门");
t1.start();
t2.start();
}
}
会场类:
public class People implements Runnable{
private int front = 0;
private int back = 0;
private int count = 100;
public List<Integer> cai() {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
list.add((int) (1+Math.random()*32));
}
list.add((int)(1+Math.random()*15));
return list;
}
public void run() {
while (count > 0) {
synchronized (this) {
if ("前门".equals(Thread.currentThread().getName())) {
System.out.println("第"+(100-count+1)+"名员工,从"+Thread.currentThread().getName()+"进,取出的双色球的号码为:"+cai());
front++;
count--;
}else if ("后门".equals(Thread.currentThread().getName())) {
System.out.println("第"+(100-count+1)+"名员工,从"+Thread.currentThread().getName()+"进,取出的双色球的号码为:"+cai());
back++;
count--;
}
if (count==0) {
System.out.println("前门人数:"+front+"\r\n"+"后门人数:"+back);
}
}
}
}
}
求问:while的条件count>0,为什么在同步代码块内,会多输出count=0,第101号员工的情况,while不应该筛掉了吗?