java定时删除map中的超时数据
时间: 2024-01-10 19:04:45 浏览: 39
可以使用Java的Timer类和TimerTask类来实现定时删除Map中的超时数据。具体实现步骤如下:
1. 定义一个包含Map的类,并在该类中定义一个Timer对象和一个TimerTask对象。
2. 在TimerTask对象中重写其run()方法,将需要删除的超时数据从Map中删除。
3. 在Timer对象中调用schedule()方法,设置定时执行的时间和间隔时间。
4. 在使用Map时,每次插入数据时,同时记录该数据的插入时间。
5. 在TimerTask中的run()方法中,遍历Map中的所有数据,将超时的数据删除。
下面是一个示例代码:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
public class MapDemo {
private Map<String, Long> map = new HashMap<>();
private Timer timer = new Timer();
private TimerTask task = new TimerTask() {
@Override
public void run() {
long now = System.currentTimeMillis();
for (String key : map.keySet()) {
if (now - map.get(key) > 60 * 1000) { // 超时时间为1分钟
map.remove(key);
}
}
}
};
public void put(String key, Object value) {
map.put(key, System.currentTimeMillis());
// 插入数据时,同时记录插入时间
}
public Object get(String key) {
return map.get(key);
}
public Map<String, Long> getAll() {
return map;
}
public void startTimer() {
timer.schedule(task, 60 * 1000, 60 * 1000); // 定时执行的时间和间隔时间均为1分钟
}
public static void main(String[] args) {
MapDemo demo = new MapDemo();
demo.startTimer(); // 启动定时删除超时数据的任务
// 测试插入数据
demo.put("key1", "value1");
demo.put("key2", "value2");
demo.put("key3", "value3");
System.out.println(demo.getAll());
// 等待一段时间后再次测试
try {
Thread.sleep(2 * 60 * 1000); // 等待2分钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(demo.getAll());
}
}
```
在上面的代码中,定时删除超时数据的任务是在startTimer()方法中启动的,间隔时间为1分钟。在测试时,先插入3条数据,然后等待2分钟后再次输出Map中的所有数据,可以看到超时的数据已经被成功删除了。