Java 递归同步与递归重入锁
我知道线程可以获取自己拥有的监视器,即在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.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();//
}