在典型的JAVA应用程序中,配置用于管理全局线程池的全局ExecutorService。可以说,我配置100个线程的固定的线程池:仅使用ExecutorService中的线程子集
ExecutorService threadPool = Executors.newFixedThreadPool(100);
现在让我们说,我有1000个文件的列表上传到服务器,并为每个上传我创建了一个调用将要处理的上传这一个文件。
List<Callable> uploadTasks = new ArrayList<Callable>();
// Fill the list with 1000 upload tasks
我该如何限制并发上传的最大数量,例如5?
,如果我做
threadPool.invokeAll(uploadTasks);
我没有在我的1000个任务将多少线程取得控制权。潜在的100个上传文件将并行运行,但我只想要最大值5.我想创建某种子执行程序,它使用父执行程序的一部分线程。 我不想创建一个新的分离executorService只是为了上传,因为我想管理我的线程池全局。
你们有没有人知道如何做到这一点,或者如果现有的实施存在?理想的情况是类似
ExecutorService uploadThreadPool = Executors.createSubExecutor(threadPool,5);
非常感谢,
安东尼
你可以看看http://stackoverflow.com/q/19819837/2231632看看是否适用于你的情况?你不能单独使用信号量或某种锁存器来上传逻辑? – prabugp
您提到的问题更多关于费率限制。我可以在我的客户代码中使用信号量,想知道是否有现成的设施来做这件事。 – lambdacalculus
我认为典型的Java应用程序有许多线程池,其配置与它们的用例相匹配。所以我希望你的应用程序有一个单独的5线程线程池用于这个目的。 –