2016-06-26 43 views
1

我有一个带有Java服务器的Web应用程序,并且Java应用程序正在从Web获取请求。如何限制访问实例的请求数量?

问题是,有一个对象的实例,每次只能处理一个请求,并且Web请求在对象完成其作业之前到来。

如何为这些请求创建某种“连接池”?或者有没有其他方法可以限制对这个对象实例的访问?

我在某些方法中使用了同步声明,它做的很好,但问题在于它没有排序。我怎样才能控制这个方法的传入请求的顺序?

+1

重新思考你的设计。限制请求(尽可能)对性能不利。 – Henry

+0

你可以实现一个基本的对象池。 Apache有[commons pool](https://commons.apache.org/proper/commons-pool/),这应该有所帮助。 –

+1

同步。信号灯。重新设计,所以没有一个单一的对象。太宽泛。 – EJP

回答

1

您可以尝试使用synchronized关键字同步由所有请求线程共享的方法。 这样做的缺点是会影响你的表演。 SO TRY保持同步块较小。

1

您可以将这些请求视为命令,并将它们存储在队列中并将它们逐个加1。然而,这对用户(如前所述)产生的后果是响应时间会增加。为了克服这一点,命令的处理可能是异步完成的,这意味着用户将调用该命令并得到回答命令已被正确接收。一旦服务器完成处理命令,服务器就可以回叫用户,通知他命令已被(成功)处理。

请注意,这可能会变成一个复杂的解决方案,它可能会更好地检查您是否不能删除/重构单例。