1
我想弄清楚在java中調用一個任務'x'次並且全部並行的最簡單的方法。該任務有一個字符串變量,其值對於每次調用都應該是唯一的,並且它返回一個字符串和整型結果。並行執行任務'n'
我一直在網上查找資源,現在我非常困惑。
我想弄清楚在java中調用一個任務'x'次並且全部並行的最簡單的方法。該任務有一個字符串變量,其值對於每次調用都應該是唯一的,並且它返回一個字符串和整型結果。並行執行任務'n'
我一直在網上查找資源,現在我非常困惑。
爲了並行執行任務,您的第一個選擇應該是ExecutorService。 就像他們在文檔說你得到一個實例,就是
ExecutorService service = Executors.newFixedThreadPool(poolSize);
如果你的任務必須返回一個值,你應該使用
Future<T> submit(Callable<T> task);
功能。讓你的任務實現Callable
接口,返回你需要的結果。將您的任務提交給服務,然後通過Future
對象等待結果。粗略草圖:
public class MyTask implements Callable<StringInt> {
public MyTask(String inputParameter) { ... }
public StringInt call() { ... }
}
...
List<Future<StringInt>> results = new ArrayList<Future<StringInt>>();
ExecutorService service = Executors.newFixedThreadPool(16);
for (String inputParameter : inputParameters) {
// Create tasks and start parallel execution
results.add(service.submit(new MyTask(inputParameter)));
}
for (Future<StringInt> result : results) {
// Wait for tasks to end, and get result
StringInt resultValue = result.get();
...
}
謝謝!現在,如果我想編程它,以便代碼不等待所有線程完成,例如:我希望線程在完成時返回,這是我想要使用的類。 – user2882622
如果您的意思是要提交所有任務,然後按照它們生成的順序檢索結果,則可以使用CompletionService:http://docs.oracle.com/javase/1.5.0/docs/api/java/util /concurrent/ExecutorCompletionService.html – Flavio