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

标签 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 就足够了。

最佳答案

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

关于java - 在同步方法中使用 ReadWriteLock 是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28772654/

相关文章:

Python 相当于 Java 的 `tryLock`(惯用语)?

java - Libgdx:如何将控件与可移动对象分开?

postgresql - postgresql插入和选择时如何锁表?

database - 什么是最后写入胜利?

java - JDK 对实体扩展的限制

database - 启用集群模式的 Redis 锁

MySQL:可以递归锁定表吗?

java - 如何使基于 Eclipse 的应用程序使用用户计算机上的所有内存?

java - 是否可以将字符串数组放入缓冲的阅读器中?

java - Spring WS/启动: How to set WebServiceTemplate property in client interceptor?