在典型的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線程線程池用於這個目的。 –