同步对象是否处理Java中的被调用函数?

时间:2012-04-22 14:19:48

标签: java locking

所以我想说我有这段代码:

public void bar(){
  synchronized(foo){foo.remove(0)}
}

public void doStuff(){
  synchronized(foo){
     bar()
  }
}

同步会意识到我所在的当前链有这个锁并继承它还是会死锁?

2 个答案:

答案 0 :(得分:5)

从同步块获得的锁是可重入。这不会死锁,线程可以多次获取对同一对象的锁定。

请参阅Intrinsic Locks and Synchronization

答案 1 :(得分:2)

正如马特所说,它不会死锁。

我如何看待它

这个锁机制不依赖于方法调用 控制流程。 单个线程如何执行语句以及何时执行线程 遇到一个synchronized块,然后它要求同步签名中的对象锁定。

如果有,那么它进入else将在对象的锁池中等待直到得到通知。

执行doStuff()的线程已经进行了锁定,这就是为什么没有死锁的情况