有没有办法使用同步方法为可重入锁创建机制?
由于同步方法不会让2个线程一起进入临界区,我认为这是不可能的。有谁可以给我一些见解?
假设我将可重入属性扩展到Reader-Writer问题,其中多个读者可以锁定同一个Object但Writer锁是独占的。
我们可以使用同步方法实现此功能吗?
答案 0 :(得分:2)
不确定我是否理解这个问题,但是一个可重入的锁是一个锁,当你已经拥有它时你可以第二次获得它(而不是一个非重入锁,这只会阻止它点)。
Java中的同步块具有以下属性:已经拥有锁的线程可以进入块。
如果没有这个,编写正确的执行路径将非常困难,因为你不能让一个对象的同步方法调用另一个。
答案 1 :(得分:2)
在以下代码中
public class Foo {
public synchronized void bar() {
zoop();
}
public synchronized void zoop() {}
}
如果Thread
来电
Foo foo = new Foo();
foo.bar();
您有一个可重入锁定,因为Thread
拥有Foo
对象监视器,然后在zoop()
内调用bar()
时重新获取它。
答案 2 :(得分:1)
目前尚不清楚你了解“重入”实际意味着什么。这意味着您可以重新获得已经拥有的锁,而不会被锁定。 synchronized
已经拥有重新入侵的财产。