Uri*_*Uri 3 java concurrency multithreading
我的系统由一个"代理"类组成,它接收"请求"数据包,编组它们并通过网络将它们发送到服务器,服务器解组它们,处理并返回一些"响应数据包".
代理端的"提交"方法应该阻止,直到收到请求的回复(数据包有ID用于标识和引用)或者直到达到超时.
如果我在Java的早期版本中构建这个,我可能会在我的代理中实现一个"待处理消息ID"的集合,我将在其中提交消息,并在相应的id(具有超时)上等待().收到回复后,处理线程会通知()相应的id.
有没有更好的方法来使用现有的库类来实现这一点,可能是在java.util.concurrency中?
如果我使用上述解决方案,在调用wait()之前,处理潜在竞争条件的正确方法是什么?
简单的方法是让Callable与服务器通信并返回Response.
// does not block
Future<Response> response = executorService.submit(makeCallable(request));
// wait for the result (blocks)
Response r = response.get();
Run Code Online (Sandbox Code Playgroud)
管理请求队列,为请求分配线程以及通知客户端代码都被实用程序类隐藏.
并发级别由执行程序服务控制.每个网络调用都阻塞一个线程.
为了更好的并发性,人们也可以考虑使用java.nio(但是因为你正在与所有请求的同一服务器通信,所以固定数量的并发连接,甚至可能只有一个,似乎就足够了).
| 归档时间: |
|
| 查看次数: |
878 次 |
| 最近记录: |