Java中关于多线程的疑惑求解

img

img

img

img

刚接触多线程内容,想求解一下两段程序为什么会有不同的结果。
希望能较详细的解答,感谢!

区别在于上面代码是,先判断再上锁同步。下面代码先同步上锁,在判断执不执行。
1.这就会出现,上面代码可能会出现A,B二个线程同时通过判断,但A线程先获取到锁进行执行。这个时候B线程就只能在这个地方等待。等A执行完了tickers-- = 0 后。B线程在去获取锁进行执行代码块。又执行了一次 tickers-- 。

  1. 先同步上锁再判断tickers > 0 才会去执行那块代码。