可以使用Synchronized方法在Java中实现可重入锁定机制

时间:2013-10-08 00:37:41

标签: java multithreading thread-safety

有没有办法使用同步方法为可重入锁创建机制?

由于同步方法不会让2个线程一起进入临界区,我认为这是不可能的。有谁可以给​​我一些见解?

假设我将可重入属性扩展到Reader-Writer问题,其中多个读者可以锁定同一个Object但Writer锁是独占的。

我们可以使用同步方法实现此功能吗?

3 个答案:

答案 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已经拥有重新入侵的财产。