簡體   English   中英

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

[英]Does using ReadWriteLock inside a synchronized method make sense?

我們有一些實現緩存的代碼。 所有的方法都在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就足夠了。

僅當您需要一次鎖定兩個資源時,使用兩個鎖定才有幫助。

我懷疑您只需要一把鎖,而不需要兩把。 如果您使用並發集合,則可能不需要。

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); }

是的,一個ReadWriteLock應該足夠了。 在這種情況下,將其與synchronized使用沒有多大意義: synchronized意味着一次只能有一個線程執行任何已同步的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM