如图,从一个账户转钱到另一个账户:
如果两个线程,一个是x转y,另一个是y转x,死锁就会发生。
这种情况,关键还是固定获取锁的顺序。
使用System.identityHashCode 获取对象的 hsahcode,从而来确认锁的顺序。如果两个对象的hashcode一样,则使用一个公共锁:
当然,如果有现成的,比如账户编号,就用不着hashcode,会更简单。
我们尽量短的时间来获取锁,但是这样的话,不容易测出来:
如图,从一个账户转钱到另一个账户:
如果两个线程,一个是x转y,另一个是y转x,死锁就会发生。
这种情况,关键还是固定获取锁的顺序。
使用System.identityHashCode 获取对象的 hsahcode,从而来确认锁的顺序。如果两个对象的hashcode一样,则使用一个公共锁:
当然,如果有现成的,比如账户编号,就用不着hashcode,会更简单。
我们尽量短的时间来获取锁,但是这样的话,不容易测出来: