static int a = 1;这种,两个线程运行run,主线程也在运行,所以,输出的结果肯定不唯一,是看线程运行情况变化的,你多运行几遍就知道了,出现2,4,now is 3这种结果,分析一下,有个线程先执行run,输出了一个2,另一个线程还没执行输出,主线程先执行了输出里的++a,所以主线程应该输出3,这时那另一个线程执行输出,又++a了一次,所以输出了4,然后主线程最后输出了3(这个3之前已经变成参数传递给了println方法了,所以没变),你要是在主线程输出之前sleep(100)毫秒,那输出的就肯定是 2 3 now is 4 |