【发布时间】:2023-04-18 17:52:01
【问题描述】:
我知道线程可以获取自己拥有的监视器,即在 Java 中,同步锁是 reentrant,如下例所示。
我的问题是如果我使用java.util.concurrent.locks.ReentrantLock API 是否会产生相同的结果,我们是否可以在同步中出现死锁但在java.util.concurrent.locks.ReentrantLock 中永远不会出现
例如
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();//
}
【问题讨论】:
-
您是否在询问
lock是否与您的示例中的this的监视器在同一监视器上同步?如果是这样,答案是否定的——就像lock2.lock()也不会与lock.lock()共享同一个监视器。
标签: java multithreading reentrantlock