Refactoring.
This commit is contained in:
parent
64a3e3db27
commit
f637e79ea5
@ -8,13 +8,13 @@ import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
|
|||||||
public class Cache<K, V> {
|
public class Cache<K, V> {
|
||||||
private final int maxSize;
|
private final int maxSize;
|
||||||
private final ConcurrentHashMap<K, CacheValue<K, V>> data;
|
private final ConcurrentHashMap<K, CacheValue<K, V>> data;
|
||||||
private final UsageStack<K, V> usage = new UsageStack<>();
|
private final CacheUsageStack<K, V> usage = new CacheUsageStack<>();
|
||||||
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
|
||||||
private final WriteLock writeLock = lock.writeLock();
|
private final WriteLock writeLock = lock.writeLock();
|
||||||
private final ReadLock readLock = lock.readLock();
|
private final ReadLock readLock = lock.readLock();
|
||||||
|
|
||||||
public Cache(int maxSize) {
|
public Cache(int maxSize) {
|
||||||
data = new ConcurrentHashMap<>(maxSize + 1, 0.75f, 6);
|
data = new ConcurrentHashMap<>(maxSize + 1, 0.75f, 16);
|
||||||
this.maxSize = maxSize;
|
this.maxSize = maxSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,8 @@ package ca.recrown.islandsurvivalcraft.caching;
|
|||||||
|
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
class UsageStack<K, V> {
|
class CacheUsageStack<K, V> {
|
||||||
|
private volatile int size;
|
||||||
private volatile CacheValue<K, V> first, last;
|
private volatile CacheValue<K, V> first, last;
|
||||||
private final ReentrantLock lock = new ReentrantLock();
|
private final ReentrantLock lock = new ReentrantLock();
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ class UsageStack<K, V> {
|
|||||||
}
|
}
|
||||||
value.front = null;
|
value.front = null;
|
||||||
first = value;
|
first = value;
|
||||||
|
size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeValue(CacheValue<K, V> value) {
|
private void removeValue(CacheValue<K, V> value) {
|
||||||
@ -30,6 +32,7 @@ class UsageStack<K, V> {
|
|||||||
}
|
}
|
||||||
value.front = null;
|
value.front = null;
|
||||||
value.back = null;
|
value.back = null;
|
||||||
|
size--;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void moveToTop(CacheValue<K, V> value) {
|
public void moveToTop(CacheValue<K, V> value) {
|
||||||
@ -86,4 +89,8 @@ class UsageStack<K, V> {
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user