在 Java 中,定期刷新的缓存 Map 可以使用 ScheduledExecutorService 来实现。下面是一个示例代码:\n\njava\nimport java.util.Map;\nimport java.util.concurrent.*;\n\npublic class RefreshableCacheMap<K, V> {\n private final Map<K, V> cacheMap;\n private final ScheduledExecutorService scheduler;\n\n public RefreshableCacheMap(long refreshInterval, TimeUnit timeUnit) {\n cacheMap = new ConcurrentHashMap<>();\n scheduler = Executors.newSingleThreadScheduledExecutor();\n scheduler.scheduleAtFixedRate(this::refreshCache, 0, refreshInterval, timeUnit);\n }\n\n public V get(K key) {\n return cacheMap.get(key);\n }\n\n public void put(K key, V value) {\n cacheMap.put(key, value);\n }\n\n private void refreshCache() {\n // 重新加载缓存逻辑\n // 这里只是简单示例,可以根据实际需求进行实现\n cacheMap.clear();\n // 添加新的缓存数据\n // cacheMap.put(key, value);\n }\n\n public void shutdown() {\n scheduler.shutdown();\n }\n}\n\n\n在上面的示例中,使用 ScheduledExecutorService 创建了一个单线程的定时任务调度器,通过调用 scheduleAtFixedRate 方法指定刷新间隔时间。在 refreshCache 方法中,可以实现重新加载缓存的逻辑。示例中使用了 ConcurrentHashMap 作为缓存存储。可以根据实际需求进行相应的调整。最后,通过 shutdown 方法来关闭定时任务调度器。\n\n使用示例:\n\njava\npublic class Main {\n public static void main(String[] args) {\n RefreshableCacheMap<String, String> cacheMap = new RefreshableCacheMap<>(1, TimeUnit.MINUTES);\n\n cacheMap.put("key1", "value1");\n cacheMap.put("key2", "value2");\n\n System.out.println(cacheMap.get("key1")); // 输出:value1\n\n // 等待一段时间后,缓存会被刷新\n try {\n Thread.sleep(60000);\n } catch (InterruptedException e) {\n e.printStackTrace();\n }\n\n System.out.println(cacheMap.get("key1")); // 输出:null\n\n cacheMap.shutdown();\n }\n}\n\n\n上面的示例中,缓存会在 1 分钟后被刷新。在获取缓存值之后等待 1 分钟,再次获取缓存值会返回 null,表示缓存已经被刷新。

Java 定时刷新缓存 Map: 使用 ScheduledExecutorService 实现

原文地址: https://www.cveoy.top/t/topic/pTSA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录