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