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