map key过期 java_java-ExpiringMap无法使对象过期

我尝试使用ExpringMap自动使地图对象失效.这是我第一次使用这个罐子,我知道有一个受欢迎的番石榴,但是我不需要缓存,也不知道怎么使用番石榴.

而且我碰巧知道mina项目中的ExpiringMap,所以我在下面对其进行了测试,但是它没有用.这是为什么?

我希望有一种性能良好且易于使用的方法,可以在几分钟后从地图上删除我的对象.有人能给我一个例子吗?谢谢!

ExpiringMap map2=new ExpiringMap(2,1);

ExpiringMap map10=new ExpiringMap( 10,1);

ExpiringMap map5=new ExpiringMap(5,1);

map2.put("1", "1");

map5.put("1","1");

map10.put("1", "1");

map2.put("2", "2");

map5.put("2","2");

map10.put("2", "2");

int n=0;

while(true){

System.out.println("----"+3*n+"seconds----");

Set set2=map2.keySet();

System.out.println("----map2----");

for (String key : set2) {

System.out.println(map2.get(key));

}

Set set5=map5.keySet();

System.out.println("----map5----");

for (String key : set5) {

System.out.println(map5.get(key));

}

Set set10=map10.keySet();

System.out.println("----map10----");

for (String key : set10) {

System.out.println(map10.get(key));

}

Thread.sleep(3000);//sleep 3 seconds

n++;

}

输出结果表明该对象仍在地图中

----0seconds----

----map2----

1

2

----map5----

1

2

----map10----

1

2

----3seconds----

----map2----

1

2

----map5----

1

2

----map10----

1

2

----6seconds----

----map2----

1

2

----map5----

1

2

----map10----

1

2

----9seconds----

----map2----

1

2

----map5----

1

2

----map10----

1

2

----12seconds----

----map2----

1

2

----map5----

1

2

----map10----

1

2

解决方法:

该get导致将参考时间重置,因此永远不会发生超时. map2是边界线,因为时间是2秒,检查间隔是1秒.因此它可能会倾斜到将近3秒,并且在我再次读取之前不会超时.尝试将睡眠放在第一位,并尝试将每个循环的睡眠时间延长3秒,然后看看会发生什么.

在开始过期之前,还需要添加以下行:

map2.getExpirer().startExpiring();

map10.getExpirer().startExpiring();

map5.getExpirer().startExpiring();

2秒到期.其他两个映射不是因为当前代码在引用之间的间隔永远不会足够长.

标签:apache,map,mina,java

来源: https://codeday.me/bug/20191121/2052094.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值