2013-10-08 27 views
-1

是否有一种使用同步方法创建重入锁机制的方法?可以使用同步方法在Java中实现重入锁定机制

由于同步的方法不会让2个线程一起进入临界区,我认为这是不可能的。任何人都可以提供一些见解吗?

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

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

回答

2

不知道我是否理解这个问题,但重入锁是一个锁,当您已经拥有它时可以获得第二次锁(而不是非重入锁,它只会阻止那点)。

Java中的同步块具有以下属性:已经拥有锁的线程可以输入该块。

如果没有这个,就很难编写正确的执行路径,因为你不可能有一个对象的同步方法调用另一个。

+0

我不认为有任何特殊的需要一个同步的方法来调用另一个。事实上,如果没有发生,这可能是一个好主意。 –

+1

@ TomHawtin-tackline为什么? – EJP

2

在下面的代码

public class Foo { 
    public synchronized void bar() { 
     zoop(); 
    } 

    public synchronized void zoop() {} 
} 

如果Thread电话

Foo foo = new Foo(); 
foo.bar(); 

你有一个可重入锁,因为这Thread拥有Foo对象监视器,然后重新捕获它时,它调用zoop()bar()

1

你不清楚你明白什么是'重入'的实际含义。这意味着你可以重新获得你已经拥有的锁而不被阻塞。​​已具有重入属性。

+0

“重入”一词实际上来自“重入”的含义,因为在另一个“线程”正在处理的同时,另一个“线程”可以重新输入该方法。当我们没有谈论并行/并发执行,而是单核多线程系统时,它实际上已经被使用了。 – Gray