【发布时间】:2016-04-12 13:38:07
【问题描述】:
我对服务器进行了繁重的操作,我们称之为String getData(),我希望始终获取此数据的更新版本,因此我不对调用应用缓存。
我现在的目标是避免同时运行多个getData 呼叫。在第一次调用之后(但在第一次请求结束之前)完成所有调用以等待第一个结果。
例子:
Thread 1 Thread 2 Thread 3
getData()
getData()[waiting]
getData()[waiting]
result1 received return result1 return result1
getData()
result2 received
return result2
我怎样才能做到这一点?
【问题讨论】:
-
所以你只想要一个
Thread曾经运行过getData?然后这样做——有一个Thread,当getData被调用时,阻塞直到它完成——在此期间返回一个Future。当该呼叫完成时,completeFuture并等待下一个呼叫。 -
有 3 次调用来自应用程序不同点的数据。
-
这三个都可以等待相同的倒计时或其他东西,然后收集结果。
-
你的 getData() 它返回什么?你能举一个你的代码例子吗?如果它只是一个字符串,您应该查看 StringBuffer(这是线程安全的)或者如果您使用列表,请替换为 CopyOnWriteArraySet
-
这似乎是对使用 executor 服务和
Future: winterbe.com/posts/2015/04/07/… 进行线程化的一个很好的介绍
标签: java multithreading synchronization locking