在同步方法中使用ReadWriteLock是否有意义?

时间:2015-02-27 19:19:29

标签: java locking

我们有一些实现缓存的代码。所有方法都使用synchronized关键字,并在内部使用ReadWriteLock。简化示例:

private final ReadWriteLock _rwLock = new ReadWriteLock();

public synchronized void setItem(final UUID id, final Object someObjToCache) {

    try {
        _rwLock.writeLock().lock();
        _innerCache.set(id, someObjToCache);
    } finally {
        _rwLock.writeLock().unlock();
    }
}

public synchronized Object getItem(final UUID id) {

    try {
        _rwLock.readLock().lock();
        return _innerCache.get(id);
    } finally {
        _rwLock.readLock().unlock();
    }
}

使用这两种锁定技术有什么好处吗?我希望它是一个读取主要的缓存,所以我认为只使用ReadWriteLock就足够了。

2 个答案:

答案 0 :(得分:1)

只有在需要同时锁定两个资源时才使用两个锁。

我怀疑你只需要一把锁,而不是两把。如果您使用并发集合,则可能也不需要。

final Map<UUID, Object> cache = new ConcurrentHashMap<>();

public void setItem(UUID id, Object obj) { cache.put(id, obj); }
public Object getItem(UUID id) { return cache.get(id); }

答案 1 :(得分:1)

是的,ReadWriteLock就足够了。在这种情况下,将它与synchronized一起使用没有多大意义:synchronized意味着一次只有一个线程可以执行任何同步方法。