现在,面试官来到最后一部分,也是最重要的问题之一,在我看来:你如何修复代码中的死锁?如果您仔细查看了上面的代码,那么您可能已经发现死锁的真正原因不是多线程,而是它们请求锁定的方式。 如果您提供有序访问,则问题将得到解决。
现在,不存在任何死锁,因为两个方法都以相同的顺序访问Integer和String类文本的锁。 因此,如果线程A获取Integer对象的锁定,则线程B将不会继续,直到线程A释放整数锁定;即使线程B持有字符串锁,也不会阻塞线程A,因为现在,线程B不会期望线程A释放整数锁以继续进行。