我知道如果使用 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(使用前将#替换为@)