很简单的道理,i是 1,2,3 进程公用的。他们使用了同一个i,
当i=1 时,
线程1判断通过,然后sleep
线程2判断通过,然后sleep
线程3判断通过,然后sleep
线程1 苏醒,打印后将 i变成0 继续循环
线程2 苏醒,打印后将 i变成-1 继续循环
线程3 苏醒,打印后将 i变成-2 继续循环
我们可以看到,后三次的修改并不需要重新进行while判断,原因是它们都已经判断过了。 while判断是下一次循环的事情了。
你把其中一个弄成后台线程试试
程序是等所有的线程结束后才结束的
你的这个只是1 和2 结束了 3还在跑 当然会接着执行下去