我在Java规范中看到了以下声明。
线程保持的程序(直接 或间接)锁定多个 对象应该使用常规 避免死锁的技巧, 创建更高级别的锁定 如果,那些不会死锁的原始人 必要的。
那么,"常规技术"遵循以避免僵局?我对此不太清楚(不理解,需要解释)。
答案 0 :(得分:3)
最常见的技术是以一致的明确定义的顺序获取资源(锁)。
Brian Goetz的以下文章可能会有所帮助:http://www.javaworld.com/javaworld/jw-10-2001/jw-1012-deadlock.html
它已经很老了,但很好地解释了这些问题。
答案 1 :(得分:1)
作为一个有点抽象的建议,对此的答案可能是“制定处理锁定并坚持下去的计划”。
锁定的危险是,简而言之,一个线程持有锁A并试图获得锁B,而另一个线程持有锁B并试图获得锁A.正如另一个答案所指出的那样,避免这是以一致的顺序获取锁。但是,一个好的规则是尽量减少代码使用锁定所做的工作量。任何使用锁定调用另一个函数的代码都是一个潜在的问题:如果其他函数试图获得另一个锁怎么办?如果其他人稍后修改该功能以获得锁定怎么办?尝试形成一个清晰的模式,说明使用锁定可以调用哪些函数,哪些不可以,并确保代码中的注释使这一切都清晰。
答案 2 :(得分:0)
不要锁定!认真。通过保持所有业务逻辑的单线程,我们在工作中获得了巨大的性能(在亚毫秒级延迟下完成了100k的事务)。