多线程需要一个Java方法的解决方案,该方法返回一个字符串值,在JVM中只执行n个线程
返回字符串(文件名)的Java方法在内部为一些无法进一步优化的图像操作消耗内存,比如说,每个方法执行消耗20 MB HeapSpace
此方法作为ProcessingImageData的一部分执行,需要将文件名作为输出返回给RestWebService调用方
而有些n线程是并行处理的,这会产生内存
要逃离OutofMemory HeapSpace,请提供以下建议: 仅设置固定数量的线程以执行此方法
public String deleteImageAndProvideFile(String inputImage, int deletePageNum){
// process image
//find page and delete
//merge pages to new file
// return new file Name
}
# 1 楼答案
如果您有许多任务,但希望限制执行这些任务的线程数量,请使用带有有界线程池的
ExecutorService
Executors
类有一个帮助器方法,用于创建所需的内容:newFixedThreadPool(int nosThreads)
(javadoc)李>根据要使用的内存量调整
nosThreads
参数ExecutionService
文档解释了如何使用API(javadoc)。您可以提交任务并获取Future
对象,这些对象可用于等待给定任务完成在您的用例中,您的一个web请求可能会将任务提交给“全局”执行器服务,然后等待任务完成。或者,您可以设计系统,使处理与web请求异步完成;e、 g.在一个请求中提交一项任务,然后再提出另一个请求,看看它是否已经完成