java 使用线程池 添加随机数demo

初学多线程,练习java使用线程池添加随机数
如图代码,运行完集合长度总是不到10万,

img

img

添加一行打印,长度就是10万

img

img

一开始以为遇到了代码中的“波粒二象性”,当我想观测哪条没添加时,集合的概率云就坍缩了,后来想到可能是计算机处理太快,加一句打印就延迟了添加进集合这一步骤,所以尝试着用同步代码块锁住,结果无效:

img

这时候想是不是要在循环外部锁住,因为以前看过内外两层锁的处理方式,结果仍然无效:

img

请问这个问题的出现原因以及怎样解决?

44行shutdown()方法哪一行之前,添加Thread.sleep(3000);