2017-10-09 49 views
0

我正在写一个java应用程序,其中中央数据结构将随来自外部系统的请求和相应响应一起更新。 我怎样才能确保没有竞争条件?以下是我如何实施。如何维护使用多线程的异步操作任务的顺序

我收到来自GUI的请求,我将它处理并存储在hashmap的hashmap中,然后将请求转发给外部系统,以便异步获取响应。当我收到基于我之前发送的某个id的响应时,我更新了数据结构(hashmap的hashmap)

我创建了一个线程来处理来自GUI的请求,另一个线程处理来自外部系统的响应。 我创建了2个linkedblockingqueues - 一个用于请求,另一个用于响应

我正在使用executor服务为请求&响应创建多个线程。 我如何确保事物按顺序执行? 这是一个订单管理系统,我不想在新订单发送之前发送修改。

+0

如果您使用队列,您的要求已在顺序,是不是? – VGR

+0

是的,但我们是否需要为请求和响应使用相同的队列。如果是的话,性能会受到影响? – sri

+0

您是否要求如何同时处理多个请求,即使它们不按顺序完成,同时仍将它们保留在保留请求顺序的队列中?根据订购的请求编号或其他可排序请求属性(如日期),您可能需要一个PriorityQueue。 – VGR

回答