캐시 클래스 설계
CacheClassTest2.java
package cn.itcast.thread;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheClassTest2<T> {
Map<String, T> cache = new HashMap<String, T>();
ReadWriteLock rwLock = new ReentrantReadWriteLock();
public T get(String key) {
rwLock.readLock().lock();
T value = cache.get(key);
try {
if (value == null) {
rwLock.readLock().unlock();
rwLock.writeLock().lock();
value = (T)" ";
cache.put(key, value);
rwLock.writeLock().unlock();
rwLock.readLock().lock();
}
} finally {
rwLock.readLock().unlock();
}
return value;
}
}
캐시 클래스에 저장할 수 있는 유형은 여러 가지가 있어야 하기 때문에 여기서 클래스 범주를 사용하고 읽기와 쓰기 자물쇠를 추가하면 읽을 때 내용을 수정할 수 없습니다.
생각: 읽기와 쓰기 자물쇠에서 쓰기 자물쇠는 반드시 풀어야 한다. 그렇지 않으면 읽을 방법이 없다. 그러나 읽기 자물쇠는 왜 마지막에 풀어야 합니까?여러 개의 자물쇠가 서로 배척하지 않는 이상, 왜finally에서 자물쇠를 잠그고 해제해야 합니까?
개인적으로는 여기서 자물쇠를 풀지 않아도 되고, 자물쇠가 없는 상황에서 읽는 것은 막힘이 없고, 읽는 자물쇠를 방출하는 것은 데이터 읽는 효율을 높이기 위해서라고 생각한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQLite의 query로 망설임이것은 내가 처음 안드로이드 응용 프로그램 개발에서 망설이고, 그 후 해결 된 방법을 비망록으로 철자하고 있습니다. java에서 SQLite를 이용한 애플리케이션을 작성하는 동안 EditText에 입력된 item이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.