如何快速取出一个不确定内容的MAP值?

旗木五五开 2017-02-14 09:43:53
现在有一个需求是程序需要通过key获取一个不确定返回时间的value值,例如给一个key:zhangsan,要得到value:张三,但是“张三”并不确定什么时候返回,现在我用了个最笨的办法,使用程序轮询一个MAP,等值返回的时候将"zhangsan","张三"放到MAP中,这样就可以查询到了。但问题是轮询的时间越短对性能影响越大,并且可能存在多个类似的程序在跑,代码块如下:
while (true) {
if (map.containsKey("zhangsan")) {
name=map.get("zhangsan");
break;
} else {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
logger.warn("", e);
}
}
}

求教有没有其他方案可以更好的解决这个问题。谢谢
...全文
274 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
旗木五五开 2017-02-14
  • 打赏
  • 举报
回复
引用 3 楼 u011619071 的回复:
楼主不妨把所有的取KEY得操作,封装成不同业务类型的接口,服务启动即注册接口进去,通过类似Reactor模型的方式去做会不会对业务更友好一些?
其实我这里说的是一个业务里面的,那个MAP就类似一个池,会有多个线程去取他们自己要的值,有另外的一个线程专门往里面放数据。就例如有A、B两个线程要取出key为a,b的数据,但并不知道C线程什么时候放数据进去~
旗木五五开 2017-02-14
  • 打赏
  • 举报
回复
引用 1 楼 kevlearnjava 的回复:
这种情况是不是可以使用队列啊 起一个异步线程读取队列 队列有数据的时候进行读取 无数据的时候线程自动阻塞
队列里面没法查询一个指定数据吧,并不是先进先出的去取数据。可以理解为有一个池的概念,里面随时可能丢很多数据进去,但是我要指定取某一个值
X元素 2017-02-14
  • 打赏
  • 举报
回复
楼主不妨把所有的取KEY得操作,封装成不同业务类型的接口,服务启动即注册接口进去,通过类似Reactor模型的方式去做会不会对业务更友好一些?
晓风吹雾 2017-02-14
  • 打赏
  • 举报
回复
Map value 为blockingQueue 有数值直接取出 没数值 wait 直到 数值插入到这个blocking queue。
air_kev 2017-02-14
  • 打赏
  • 举报
回复
这种情况是不是可以使用队列啊 起一个异步线程读取队列 队列有数据的时候进行读取 无数据的时候线程自动阻塞

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧