Nil*_*ils 3 java concurrency set
我正在为Java 1.5应用程序寻找具有到期功能的并发Set。它可以用作存储/缓存在特定时间后到期的名称(即字符串值)的简单方法。
我要解决的问题是,两个线程在一定时间内不应该使用相同的名称值(因此,这是一种黑名单,可确保使用相同的“名称”,就像消息引用一样,可以直到经过一定时间后才能被另一个线程重用)。我自己无法控制名称的生成,因此我无法对强制使用唯一性的实际名称/字符串做任何事情,而应将其视为一种限制/限制机制,以防止同一名称每秒使用一次以上。
示例:线程#1这样做cache.add("unique_string, 1)将名称“ unique_string”存储1秒钟。如果任何线程通过执行例如cache.get("unique_string")1秒钟内的操作来寻找“ unique_string”,它将获得肯定的响应(项目存在),但是此后该项目应过期并从集合中删除。
容器有时会每秒处理50-100次插入/读取。
我确实一直在寻找不同的解决方案,但是没有找到我认为真正适合我需要的任何东西。感觉像是一个简单的问题,但是我发现的所有解决方案都过于复杂或过大。
一个简单的想法是将一个ConcurrentHashMap对象的键设置为“名称”,将值设置为到期时间,然后一个线程每秒运行一次,并删除其值(到期时间)已经过去的所有元素,但是我不确定这样做的效率如何。将会?我没有一个更简单的解决方案吗?