Java 递归同步与递归重入锁

Java 递归同步与递归重入锁,java,multithreading,reentrantlock,Java,Multithreading,Reentrantlock,我知道线程可以获取自己拥有的监视器,即在Java中,同步锁是可重入的,如下面的示例所示 我的问题是,如果我使用java.util.concurrent.locks.ReentrantLockAPI,它是否会产生相同的结果,我们是否可以在synchronized中使用死锁,但在java.util.concurrent.locks.ReentrantLock中不使用 e、 g 如果您看一下Java文档(),要点非常清楚(我的重点是): 具有相同基本行为的可重入互斥锁和 语义作为使用synchroni

我知道线程可以获取自己拥有的监视器,即在Java中,同步锁是可重入的,如下面的示例所示

我的问题是,如果我使用
java.util.concurrent.locks.ReentrantLock
API,它是否会产生相同的结果,我们是否可以在synchronized中使用死锁,但在
java.util.concurrent.locks.ReentrantLock中不使用

e、 g


如果您看一下Java文档(),要点非常清楚(我的重点是):

具有相同基本行为的可重入互斥锁和 语义作为使用synchronized访问的隐式监视器锁 方法和语句,但具有扩展功能。A. ReentrantLock由上次成功锁定的线程拥有,但 还没有解锁。调用锁的线程将成功返回 当锁不属于另一个线程时,获取锁 如果当前线程已经拥有方法 锁定


主要的一点是,它们的行为具有相同的概念,但是
ReentrantLock
lock为
lock()
/
unlock()
/等提供了额外的方法。。方法,您可以在不同的代码块(方法)中显式使用它们。

同步锁和可重入锁都是相同的。如果您想要比重入锁更好的控制和解决复杂的同步问题,那么重入锁是最佳选择。它为隐式同步添加了其他功能,如**对条件变量的支持、锁公平性等。*
作为参考检查

您是否询问
锁定
是否与示例中的
监视器在同一监视器上同步?如果是这样,答案是否定的——正如
lock2.lock()
也不会与
lock.lock()
共享同一个监视器一样。
  final Object[] objects = new Object[10]

    public synchronized Object setAndReturnPrevious(int index, Object val) {
        lock.lock();//If i use this will it be same as above synchronization
        set(index, val);
        lock.unlock()//;
    }

    public synchronized void set(int index, Object val) {
        lock.lock();//
        objects[index] = val;
        lock.unlock();//
    }