我们有一些实现缓存的代码。所有方法都具有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就足够了。

最佳答案

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

08-19 00:13