请教Java高人解答Java Thread,Wait的问题,问题如图

为什么我将System.out.println(" The thread "+Thread.currentThread().getName()+" is using number: "+i--); 放在Wait(1000)上面就不会出现打印负数的问题了,你知道这是为什么吗?
2026年09月24日 12:13
有2个网友回答
网友(1):

很简单的道理,i是 1,2,3 进程公用的。他们使用了同一个i,

当i=1 时,
线程1判断通过,然后sleep

线程2判断通过,然后sleep
线程3判断通过,然后sleep

线程1 苏醒,打印后将 i变成0 继续循环
线程2 苏醒,打印后将 i变成-1 继续循环
线程3 苏醒,打印后将 i变成-2 继续循环

我们可以看到,后三次的修改并不需要重新进行while判断,原因是它们都已经判断过了。 while判断是下一次循环的事情了。

网友(2):

你把其中一个弄成后台线程试试

程序是等所有的线程结束后才结束的
你的这个只是1 和2 结束了 3还在跑 当然会接着执行下去