java.concurrent.ReentrantLock - 为什么我们要多次获取相同的锁[重复]

2023-11-22

我知道如果使用 ReentrantLock,它允许同一线程多次获取同一锁。其内部有一个计数器来统计获取锁的次数。如果您两次获取同一个锁,则需要释放它两次。但我的问题是,为什么有人想要多次获取锁,一次获取就足够了吗?有人可以给我一个常见的用例吗?


考虑以下情况,您需要一组不是原子的、原子的操作。例如,您可能想要设置一个数组的值,但在设置时返回其当前值。 (为简洁起见,最终删除了尝试)。

final ReentrantLock lock = new ReentrantLock();

final Object[] objects = new Object[10]
public Object setAndReturnPrevious(int index, Object val){
   lock.lock();
      Object prev = get(index);
      set(index,val);
      return prev;
   lock.unlock();
}
public void set(int index, Object val){
    lock.lock();
         objects[index] = val;
    lock.unlock();
}
public Object get(index index){...}

如果 ReentrantLock 不可重入,您将陷入僵局set(index)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.concurrent.ReentrantLock - 为什么我们要多次获取相同的锁[重复] 的相关文章

随机推荐