什么是避免死锁的“常规技术”?

时间:2011-03-01 13:18:13

标签: java multithreading

我在Java规范中看到了以下声明。

  

线程保持的程序(直接   或间接)锁定多个   对象应该使用常规   避免死锁的技巧,   创建更高级别的锁定   如果,那些不会死锁的原始人   必要的。

那么,"常规技术"遵循以避免僵局?我对此不太清楚(不理解,需要解释)。

3 个答案:

答案 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的事务)。