load(K key);
-}
\ No newline at end of file
diff --git a/src/main/java/com/io/yutian/elementoriginlib/expiringmap/ExpiringMap.java b/src/main/java/com/io/yutian/elementoriginlib/expiringmap/ExpiringMap.java
deleted file mode 100644
index 89f8376..0000000
--- a/src/main/java/com/io/yutian/elementoriginlib/expiringmap/ExpiringMap.java
+++ /dev/null
@@ -1,1431 +0,0 @@
-package com.io.yutian.elementoriginlib.expiringmap;
-
-import com.io.yutian.elementoriginlib.expiringmap.internal.Assert;
-import com.io.yutian.elementoriginlib.expiringmap.internal.NamedThreadFactory;
-
-import java.lang.ref.WeakReference;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-/**
- * A thread-safe map that expires entries. Optional features include expiration policies, variable entry expiration,
- * lazy entry loading, and expiration listeners.
- *
- *
- * Entries are tracked by expiration time and expired by a single thread.
- *
- *
- * Expiration listeners are called synchronously as entries are expired and block write operations to the map until they
- * completed. Asynchronous expiration listeners are called on a separate thread pool and do not block map operations.
- *
- *
- * When variable expiration is disabled (default), put/remove operations have a time complexity O(1). When
- * variable expiration is enabled, put/remove operations have time complexity of O(log n).
- *
- *
- * Example usages:
- *
- *
- * {@code
- * Map map = ExpiringMap.create();
- * Map map = ExpiringMap.builder().expiration(30, TimeUnit.SECONDS).build();
- * Map map = ExpiringMap.builder()
- * .expiration(10, TimeUnit.MINUTES)
- * .entryLoader(new EntryLoader() {
- * public Connection load(String address) {
- * return new Connection(address);
- * }
- * })
- * .expirationListener(new ExpirationListener() {
- * public void expired(String key, Connection connection) {
- * connection.close();
- * }
- * })
- * .build();
- * }
- *
- *
- * @param Key type
- * @param Value type
- * @author Jonathan Halterman
- */
-public class ExpiringMap implements ConcurrentMap {
- static volatile ScheduledExecutorService EXPIRER;
- static volatile ThreadPoolExecutor LISTENER_SERVICE;
- static ThreadFactory THREAD_FACTORY;
- private final AtomicReference expirationPolicy;
- private final EntryLoader super K, ? extends V> entryLoader;
- private final ExpiringEntryLoader super K, ? extends V> expiringEntryLoader;
- private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
- private final Lock readLock = readWriteLock.readLock();
- private final Lock writeLock = readWriteLock.writeLock();
- /**
- * Guarded by "readWriteLock"
- */
- private final EntryMap entries;
- private final boolean variableExpiration;
- List> expirationListeners;
- List> asyncExpirationListeners;
- private AtomicLong expirationNanos;
- private int maxSize;
-
- /**
- * Creates a new instance of ExpiringMap.
- *
- * @param builder The map builder
- */
- private ExpiringMap(final Builder builder) {
- if (EXPIRER == null) {
- synchronized (ExpiringMap.class) {
- if (EXPIRER == null) {
- EXPIRER = Executors.newSingleThreadScheduledExecutor(
- THREAD_FACTORY == null ? new NamedThreadFactory("ExpiringMap-Expirer") : THREAD_FACTORY);
- }
- }
- }
-
- if (LISTENER_SERVICE == null && builder.asyncExpirationListeners != null)
- initListenerService();
-
- variableExpiration = builder.variableExpiration;
- entries = variableExpiration ? new EntryTreeHashMap() : new EntryLinkedHashMap();
- if (builder.expirationListeners != null)
- expirationListeners = new CopyOnWriteArrayList>(builder.expirationListeners);
- if (builder.asyncExpirationListeners != null)
- asyncExpirationListeners = new CopyOnWriteArrayList>(builder.asyncExpirationListeners);
- expirationPolicy = new AtomicReference(builder.expirationPolicy);
- expirationNanos = new AtomicLong(TimeUnit.NANOSECONDS.convert(builder.duration, builder.timeUnit));
- maxSize = builder.maxSize;
- entryLoader = builder.entryLoader;
- expiringEntryLoader = builder.expiringEntryLoader;
- }
-
- /**
- * Sets the {@link ThreadFactory} that is used to create expiration and listener callback threads for all ExpiringMap
- * instances.
- *
- * @param threadFactory
- * @throws NullPointerException if {@code threadFactory} is null
- */
- public static void setThreadFactory(ThreadFactory threadFactory) {
- THREAD_FACTORY = Assert.notNull(threadFactory, "threadFactory");
- }
-
- /**
- * Creates an ExpiringMap builder.
- *
- * @return New ExpiringMap builder
- */
- public static Builder