java - 需要一个 Java 方法的解决方案,该方法返回一个字符串值,以便在 JVM 中仅执行 n 个线程

标签 java multithreading executorservice java.util.concurrent threadpoolexecutor

返回 string(fileName) 的 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
}

最佳答案

如果您有多个任务,但想要限制执行这些任务的线程数量,请使用 ExecutorService具有有界线程池。

Executors类有一个辅助方法来创建您需要的内容:

  • newFixedThreadPool(int nosThreads) (javadoc)。

调整nosThreads根据您要使用多少内存来设置参数。

ExecutionService文档解释了如何使用 API ( javadoc )。您提交任务并获得Future可用于等待给定任务完成的对象。

在您的用例中,您的一个 Web 请求可能会将任务提交到“全局”执行器服务,然后等待任务完成。或者,您可以设计您的系统,使处理与 Web 请求异步完成;例如在一个请求中提交一项任务,然后发出另一个请求以查看该任务是否已完成。

关于java - 需要一个 Java 方法的解决方案,该方法返回一个字符串值,以便在 JVM 中仅执行 n 个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61269840/

相关文章:

java - 在 Android 中将 intent 用于 Game Over 屏幕时出错

java - Eclipse 插件中的 Phantom 项目

java - 素数生成器逻辑

multithreading - TestNG如何使用多个线程调用测试方法?

java - 用于根据 token 拆分数组的正则表达式

android - 如何实现更灵活的AsyncTask?

java - 从一个线程中退出

java - executorService.submit(Runnable) 返回的 future 对象是否包含对可运行对象的任何引用?

java - 为什么 Executor Service Implementation 的 Pool count 会增加?

Java - ExecutorService 具有明显空闲线程