以上要想发生死锁:
一种死锁可能情况:
①cpu切换到Thread-0进入 synchronized(MyLock.locka) 持有locka
②cpu切换到 Thread-1进入 synchronized(MyLock.lockb)持有lockb
③cpu再次切换到 Thread-0执行synchronized(MyLock.lockb) 需要持有lockb,才能进入->进不去
④cpu再次切换到 Threa-1 执行 synchronized(MyLock.locka) 需要持有locka,才能进入->进不去
但是可能发生一种很和谐的情况,就是你的运行结果:
①cpu切换到Thread-0 进入 synchronized(MyLock.locka) 持有locka,接着向下执行,当把同步代码块执行完,释放了locka和lockb
②cpu切换到Thread-1 同理.
我之前 手动模拟,减小死锁概率,也就是可以让其中一个线程sleep会,让cpu执行另一个线程,也就是上面的和谐情况.
|