会不会是因为你的线程在sleep,然后在主线程的while循环中的判断条件不满足了,就是因为有些线程还在sleep,判定的就不是处于active状态,就进行了getNumber的操作,所以才会有这么明显的体现。
while循环内判断的是所有的子线程是否都运行完了,如果是的话,继续下面的打印操作。
如果不用synchronized或不加锁,程序运行时,有时候getNumber获得的值小于500,是因为volatile定义的变量不能保证原子性,所以会出现两个线程同时写number时,number只增加了1,没有增加2,所以影响到number变量最终的值不是500,而是499或498了。