如何在多线程中处理n个请求

时间:2015-11-12 15:30:07

标签: java multithreading

我是编程的新手,在我的公司,我们有预订系统。对于我们的软件,我将获得对我们服务的XML请求。什么时候我们得到我们的服务请求。我们创建一个线程并处理它。这个软件工作得很好。但最近我们遇到了新的问题。我们的客户之一是在X小时(例如1:AM)发送他的预订信息(例如10000个XML) Day.As我们的软件表现我们正在创建10000个线程。然后我们得到OutOfMemorryError。为了改进这一点,我们正在考虑使用Executors实现。 我的问题是我们使用最佳方式处理10000个请求吗? 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

创建具有最大线程数的Executor,例如:

ThreadPoolExecutor executor
    = new ThreadPoolExecutor(50, 50, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
executor.allowCoreThreadTimeOut(true);

前50是corePoolSize,第二50是maximumPoolSize。不同之处在于,只有在队列已满时才会创建超过corePoolSize个线程。

我们不希望有50个空闲线程,所以我们让它们在60秒后超时(allowCoreThreadTimeOut(true))。

您可能还想在队列中设置最大容量。如果所有线程都忙并且队列已满,则会抛出异常(当您尝试向队列添加太多时,而不是OutOfMemoryError。)

然后,您只需致电executor.submit(...)并将RunnableCallable作为参数。