B
bygones
Gast
Hi,
ich habe folgendes Szenario:
Ich will eine Reihe von asychronen Thread starten lassen und die Ergebnisse nach max. X sekunden holen (wenn frueher da sind, dann natuerlich frueher). Sind alle Threads beendet (sei es weil sie durch gelaufen sind oder wegen timeout), dann geht das Programm normal weiter.
Ich hab ein bisschen rumgesucht und bin dabei auf ExecutorService und Callable gestossen - da ich noch nicht viel erfahrung da habe - also im sinne von gar keiner - wollte ich mal nachfragen ob das dafuer verwendbar ist und / oder obs etwas besser passendes gibt
ich hab mal das exception handling weggelassen...
was mich ein bisschen stoert ist, dass ich somit nicht auf jeden Thread X Sekunde warte, sondern wenn der 1. Thread z.b. nach 5sec nichts liefert, wird der 2. abgefragt - auch 5sek lang... d.h. der kann insg 10sec laufen....
Ist das anders moeglich - OHNE komplett eigenes Thread start run stop interrupt join sich zu basteln ?
danke
ps: gern gesehen sind auch gute seiten / erklaerungen ueber Executor und Konsorten....
ich habe folgendes Szenario:
Ich will eine Reihe von asychronen Thread starten lassen und die Ergebnisse nach max. X sekunden holen (wenn frueher da sind, dann natuerlich frueher). Sind alle Threads beendet (sei es weil sie durch gelaufen sind oder wegen timeout), dann geht das Programm normal weiter.
Ich hab ein bisschen rumgesucht und bin dabei auf ExecutorService und Callable gestossen - da ich noch nicht viel erfahrung da habe - also im sinne von gar keiner - wollte ich mal nachfragen ob das dafuer verwendbar ist und / oder obs etwas besser passendes gibt
Code:
public class Test() {
private static final int TIMEOUT = 5;
public static void main(String[] args) {
Callable<String> c1 = createCallable(); // also irgendein Callable erzeugen
Callable<String> c2 = createCallable(); // und noch eins
ExecutorService executor = Executors.newCachedThreadPool(); // oder auch fixed pool
Future res1 = executor.submit(c1);
Future res2 = executor.submit(c2);
String result1 = res1.get(TIMEOUT, TimeUnit.SECONDS);
String result2 = res2.get(TIMEOUT, TimeUnit.SECONDS);
// und irgendwie weiter
}
}
was mich ein bisschen stoert ist, dass ich somit nicht auf jeden Thread X Sekunde warte, sondern wenn der 1. Thread z.b. nach 5sec nichts liefert, wird der 2. abgefragt - auch 5sek lang... d.h. der kann insg 10sec laufen....
Ist das anders moeglich - OHNE komplett eigenes Thread start run stop interrupt join sich zu basteln ?
danke
ps: gern gesehen sind auch gute seiten / erklaerungen ueber Executor und Konsorten....