【发布时间】:2016-04-17 11:33:46
【问题描述】:
在 Java 并发实践中,我提出了避免死锁的技术。当我们需要获取多个锁以保证一致性时,他提出获取使用tryLock()。如下:
public void m(MyObject o1, MyObject o2){
synchronized(o1){
synchornized(o2){
//...
}
}
}
我们最好使用这个:
public void m(MyObject o1, MyObject o2){
while(true){
if(o1.lock.tryLock(){
try{
if(o2.lock.tryLock(){
try{
//...
} finally {
o2.lock.unlock();
}
}
} finally {
o2.lock.unlock()
}
}
}
}
现在他走了:
此技术仅在两个锁同时获取时才有效;如果 由于嵌套方法调用而获得了多个锁,您不能 只需松开外锁,即使您知道自己握着它。
这不是很明显。为什么在方法中调用方法时不能使用它?可以举个例子吗?
【问题讨论】:
-
查看@Boris the Spider 的评论:stackoverflow.com/questions/42573218/…
标签: java multithreading locking