1

我想弄清楚在java中調用一個任務'x'次並且全部並行的最簡單的方法。該任務有一個字符串變量,其值對於每次調用都應該是唯一的,並且它返回一個字符串和整型結果。並行執行任務'n'

我一直在網上查找資源,現在我非常困惑。

回答

1

爲了並行執行任務,您的第一個選擇應該是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(); 
    ... 
} 
+0

謝謝!現在,如果我想編程它,以便代碼不等待所有線程完成,例如:我希望線程在完成時返回,這是我想要使用的類。 – user2882622

+0

如果您的意思是要提交所有任務,然後按照它們生成的順序檢索結果,則可以使用CompletionService:http://docs.oracle.com/javase/1.5.0/docs/api/java/util /concurrent/ExecutorCompletionService.html – Flavio