如果我的问题很愚蠢,我很抱歉。
我正在使用ArrayBlockingQueue。
private ArrayBlockingQueue<RequestParameters> processorQueue;
private int sizeOfQueue = 3000;在这里,我的生产者是分开的线程和消费者是分开的线程。两者都运行在单一生产者-消费者线程模式。
现在,我正在运行我的Java应用程序,它向我的Servlet提供请求。生产者将请求放入队列中。使用者为请求拍照并开始处理,这涉及到DB操作。(完成任务大约需要1秒)
在这里,我的生产者得到的请求非常快,它填充队列,等待消费者开始处理,并在队列中腾出空间。
我的问题是
谢谢。
发布于 2013-07-18 07:54:03
虽然正确的解决方案将取决于应用程序需求的可行性,但以下几点可能会有所帮助:
当q满而不是无限期阻塞时,使用timeout阻塞,这样servlet将在固定配置的时间内返回响应。在timeout的情况下,servlet可以抛出服务器繁忙的自定义错误消息或相关的HTTP-CODE。
由于您的使用者速度慢,并且producer非常快,所以您最好考虑增加使用者线程,以便为servlet调用者提供较少的阻塞体验。
此外,接受所有请求(即存储到无限制的- Q )将不是一个很好的解决方案,因为(取决于请求大小)由于消费者q慢,一段时间内可能会消耗大量内存。
发布于 2013-07-18 08:47:42
什么是我应该使用的最好的BlockingQueue,这样我才能获得最佳的性能。
考虑到系统中有一个网络,我会感到惊讶,但是如果FIFO性能是您的标准,并且没有随机访问,那么您应该根据链接列表使用一个网络。
当队列大小满时会发生什么?
您指定了BlockingQueue,,因此它将被阻塞。
这些都在Javadoc里。
https://stackoverflow.com/questions/17717620
复制相似问题