首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同步方法中使用ReadWriteLock是否有意义?

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

Stack Overflow用户
提问于 2015-02-27 19:19:29
回答 2查看 103关注 0票数 1

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

代码语言:javascript
复制
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就足够了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 19:23:23

是的,一个ReadWriteLock就足够了。在本例中,与synchronized一起使用它没有多大意义:synchronized意味着一次只能执行一个同步方法。

票数 1
EN

Stack Overflow用户

发布于 2015-02-27 19:22:03

只有当您需要同时锁定两个资源时,才能使用两个锁。

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28772654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档