Make some things non-static
This commit is contained in:
parent
b220309a68
commit
6cef9b89b0
|
@ -38,9 +38,6 @@ class WeakMapSuppliers {
|
||||||
private static final long CLEAN_FREQUENCY_SECONDS = 1;
|
private static final long CLEAN_FREQUENCY_SECONDS = 1;
|
||||||
private static final long SHUTDOWN_WAIT_SECONDS = 5;
|
private static final long SHUTDOWN_WAIT_SECONDS = 5;
|
||||||
|
|
||||||
private static final Queue<WeakReference<WeakConcurrentMap>> SUPPLIED_MAPS =
|
|
||||||
new ConcurrentLinkedQueue<>();
|
|
||||||
|
|
||||||
private static final ThreadFactory THREAD_FACTORY =
|
private static final ThreadFactory THREAD_FACTORY =
|
||||||
new ThreadFactory() {
|
new ThreadFactory() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,12 +52,7 @@ class WeakMapSuppliers {
|
||||||
private static final ScheduledExecutorService CLEANER =
|
private static final ScheduledExecutorService CLEANER =
|
||||||
Executors.newScheduledThreadPool(1, THREAD_FACTORY);
|
Executors.newScheduledThreadPool(1, THREAD_FACTORY);
|
||||||
|
|
||||||
private static final Runnable RUNNABLE = new Cleaner();
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
CLEANER.scheduleAtFixedRate(
|
|
||||||
RUNNABLE, CLEAN_FREQUENCY_SECONDS, CLEAN_FREQUENCY_SECONDS, TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Runtime.getRuntime()
|
Runtime.getRuntime()
|
||||||
.addShutdownHook(
|
.addShutdownHook(
|
||||||
|
@ -80,8 +72,24 @@ class WeakMapSuppliers {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void cleanMaps() {
|
private final Queue<WeakReference<WeakConcurrentMap>> suppliedMaps =
|
||||||
for (final Iterator<WeakReference<WeakConcurrentMap>> iterator = SUPPLIED_MAPS.iterator();
|
new ConcurrentLinkedQueue<>();
|
||||||
|
|
||||||
|
private final Runnable runnable =
|
||||||
|
new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
cleanMaps();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
WeakConcurrent() {
|
||||||
|
CLEANER.scheduleAtFixedRate(
|
||||||
|
runnable, CLEAN_FREQUENCY_SECONDS, CLEAN_FREQUENCY_SECONDS, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cleanMaps() {
|
||||||
|
for (final Iterator<WeakReference<WeakConcurrentMap>> iterator = suppliedMaps.iterator();
|
||||||
iterator.hasNext(); ) {
|
iterator.hasNext(); ) {
|
||||||
final WeakConcurrentMap map = iterator.next().get();
|
final WeakConcurrentMap map = iterator.next().get();
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
|
@ -95,18 +103,10 @@ class WeakMapSuppliers {
|
||||||
@Override
|
@Override
|
||||||
public <K, V> WeakMap<K, V> get() {
|
public <K, V> WeakMap<K, V> get() {
|
||||||
final WeakConcurrentMap<K, V> map = new WeakConcurrentMap<>(false);
|
final WeakConcurrentMap<K, V> map = new WeakConcurrentMap<>(false);
|
||||||
SUPPLIED_MAPS.add(new WeakReference<WeakConcurrentMap>(map));
|
suppliedMaps.add(new WeakReference<WeakConcurrentMap>(map));
|
||||||
return new Adapter<>(map);
|
return new Adapter<>(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class Cleaner implements Runnable {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
cleanMaps();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Adapter<K, V> implements WeakMap<K, V> {
|
private static class Adapter<K, V> implements WeakMap<K, V> {
|
||||||
private final WeakConcurrentMap<K, V> map;
|
private final WeakConcurrentMap<K, V> map;
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,11 @@ class WeakConcurrentSupplierTest extends Specification {
|
||||||
def map1 = WeakMap.Provider.newWeakMap().map
|
def map1 = WeakMap.Provider.newWeakMap().map
|
||||||
|
|
||||||
then:
|
then:
|
||||||
supplier.SUPPLIED_MAPS.iterator().next().get() == map1
|
supplier.suppliedMaps.iterator().next().get() == map1
|
||||||
|
|
||||||
when:
|
when:
|
||||||
def map2 = WeakMap.Provider.newWeakMap().map
|
def map2 = WeakMap.Provider.newWeakMap().map
|
||||||
def iterator = supplier.SUPPLIED_MAPS.iterator()
|
def iterator = supplier.suppliedMaps.iterator()
|
||||||
|
|
||||||
then:
|
then:
|
||||||
iterator.next().get() == map1
|
iterator.next().get() == map1
|
||||||
|
|
Loading…
Reference in New Issue