【发布时间】:2011-03-28 17:39:10
【问题描述】:
我有从调用外部服务的 servlet 调用的代码。当然,不能保证服务需要多长时间才能返回响应。我需要确保一次对该服务的调用不超过一个,但当然 servlet 容器可以对 servlet 运行并发请求。我想保证请求的优先级是在先到先服务器的基础上处理单个文件。因此,我对外部 servlet 的调用被同步是不够的,因为一旦当前调用完成,就无法保证接下来进入哪个线程进行调用。
有什么想法吗?
【问题讨论】:
-
您无法控制请求到达您的服务器所需的时间,因此您并不真正知道哪个先出现。我不会太担心请求的顺序,只需要它们相互隔离即可。
-
假设处理第一个请求需要 20 分钟。让 1 秒前的第 n 个请求在 20 分钟前的 1 到 n-1 之前执行是否公平?这样你就可以完全饿死了。 (是的,20 分钟是极端的,会引起其他需要关注的问题)
-
另外,你是对的,但是我可以通过控制对这个可能长时间运行的资源的访问来缓解问题的程度,而容器的请求不太可能长时间运行(我的应用程序是容器中只有一个)。
标签: java multithreading concurrency