ExecutorService-Viele Threads nur x Laufen?

junior0007

Grünschnabel
Hi,

ich habe eine Applikation, die sehr viele Threads gleichzeitig startent und nachdem alle abgelaufen sind weiterrechnen soll. Damit es nicht zu viele auf werden, wollte ich die Anzahl der aktiven Threads beschränken. Bei der Suche nach einer fertigen Lösung bin ich auf ExecutorService gestossen. Eigentlich eine tolle Klasse aber irgendwie steig ich nicht ganz durch :-(

Hier ist mal der Codeausschnitt:
Code:
Iterator iter = _graph.getVertices().iterator();
ExecutorService executor = Executors.newFixedThreadPool(_numOfInstances);

while(iter.hasNext())
{
  CityVertex v = (CityVertex)iter.next();
  System.out.println(" starte Thread: " + v);
  executor.submit(new TNGDShortestPath(_graph, new NumberEdgeValueImpl(), false, this, v));
}
		
try
{
// TODO läuft irgendwie nicht wie geplant...
  executor.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
}
catch(InterruptedException e)
{
   System.out.println("uups");
}
finally
{
   executor.shutdown();
}
ExecutorService scheint ganz gut zu laufen, allerdings läuft die Klasse IMMER bis zum Timeout. Nachdem ich schlecht schätzen kann wie lange die einzelnen Threads laufen ist das natürlich suboptimal.

Kann mir irgendjemand sagen wie man ExecutorService dazu bewegt eine awaitTermination ohne Timeoutbedingung zu machen (Also warte bis alle Threads (jeweils max n gleichzeitig) abgelaufen sind und dann mach weiter)?
Ist ExecuteService überhaupt die richtige Lösung für mein Problem? Gibt es einen anderen (eleganten) Weg?

Danke
Bazl
 
Zurück