diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java index 1fea2b3b8..a51ec010b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java @@ -156,9 +156,9 @@ public class ThreadManager implements IManager { public static void reStart(){ LOGGER.info("重启线程池!!"); -// scheduledExecutor.shutdown(); scheduledFutureSets.forEach(future -> future.cancel(false)); scheduledFutureSets.clear(); + TaskKit.reset(); go(); } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java b/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java index c15e3e0f1..3e94171c5 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/DynamicLRUCache.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import util.TimeUtils; import java.util.*; import java.util.concurrent.locks.ReadWriteLock; @@ -26,7 +27,7 @@ public class DynamicLRUCache { } public V get(K key) { - lock.readLock().lock(); +// lock.readLock().lock(); try { TimedCacheEntry entry = cache.get(key); if (entry != null && !isEntryExpired(entry)) { @@ -35,51 +36,51 @@ public class DynamicLRUCache { } return null; } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public void put(K key, V value) { - lock.writeLock().lock(); +// lock.writeLock().lock(); try { if (cache.size() >= maxSize && maxSize < Integer.MAX_VALUE / 2) { maxSize *= 2; // 控制最大扩容限制 } cache.put(key, new TimedCacheEntry<>(value)); } finally { - lock.writeLock().unlock(); +// lock.writeLock().unlock(); } } public void remove(K key) { - lock.writeLock().lock(); +// lock.writeLock().lock(); try { cache.remove(key); } finally { - lock.writeLock().unlock(); +// lock.writeLock().unlock(); } } public boolean containsKey(K key) { - lock.readLock().lock(); +// lock.readLock().lock(); try { return cache.containsKey(key); } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public int size() { - lock.readLock().lock(); +// lock.readLock().lock(); try { return cache.size(); } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public List getAll() { - lock.readLock().lock(); +// lock.readLock().lock(); try { List values = new ArrayList<>(); for (TimedCacheEntry entry : cache.values()) { @@ -89,28 +90,28 @@ public class DynamicLRUCache { } return values; } finally { - lock.readLock().unlock(); +// lock.readLock().unlock(); } } public void shrinkToFit() { - lock.writeLock().lock(); - try { - // 减少缓存大小调整的频率 - if (cache.size() < maxSize / 2 && maxSize > 100) { - maxSize /= 2; // 缩小缓存容量 - } - Iterator>> iterator = cache.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry> entry = iterator.next(); - if (isEntryExpired(entry.getValue())) { - iterator.remove(); // 使用迭代器来安全移除条目 - } - } - } finally { - lock.writeLock().unlock(); + long now = TimeUtils.now(); + // 减少缓存大小调整的频率 + if (cache.size() < maxSize / 2 && maxSize > 100) { + maxSize /= 2; // 缩小缓存容量 } - LOGGER.info("当前用户缓存列表大小,num:{},max:{}", size(), maxSize); + Iterator>> iterator = cache.entrySet().iterator(); + HashSet removeUsers = new HashSet<>(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + if (isEntryExpired(entry.getValue())) { + removeUsers.add((Integer) entry.getKey()); + } + } + for (Integer id : removeUsers) { + cache.remove(id); + } + LOGGER.info("当前用户缓存列表大小,num:{},max:{},time:{}ms", size(), maxSize, TimeUtils.now()-now); }