Hi,
habe hier ein abgeändertes beispiel eines ExecutorService, eigentlich sollte das programm 10*10 in 5 threads ausrechen. aber aus irgendwelchem gründen kommen keine ergebnisse an.
der code "hängt", in eclipse wird das rote kästchen zum abbrechen des programmes viel zu lange angezeigt.
laut beispiel sollte:
so lange warten bis der erste thread in der liste ein ergebnis liefert und dann auf den zweiten warten...
warum aber liefert der code nicht 5x100 aus ausgabe?
Quelle: ExecutorCompletionService in Practice | Javalobby
habe hier ein abgeändertes beispiel eines ExecutorService, eigentlich sollte das programm 10*10 in 5 threads ausrechen. aber aus irgendwelchem gründen kommen keine ergebnisse an.
der code "hängt", in eclipse wird das rote kästchen zum abbrechen des programmes viel zu lange angezeigt.
laut beispiel sollte:
Java:
for (Future<Integer> contentFuture : contentsFutures) {
so lange warten bis der erste thread in der liste ein ergebnis liefert und dann auf den zweiten warten...
warum aber liefert der code nicht 5x100 aus ausgabe?
Java:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class MultiThreadTest {
public int permutationMain() {
return 10*10;
}
public static void main(String args[]) {
final ExecutorService pool = Executors.newFixedThreadPool(5);
List<Future<Integer>> contentsFutures = new ArrayList<>();
for (int n=0; n<5; n++) {
final Future<Integer> contentFuture = pool.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
MultiThreadTest x = new MultiThreadTest();
return x.permutationMain();
//return IOUtils.toString(new URL("http://" + site), StandardCharsets.UTF_8);
}
});
contentsFutures.add(contentFuture);
}
for (Future<Integer> contentFuture : contentsFutures) {
try {
final Integer content = contentFuture.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}